2011-10-05 4 views
4

Google 구아바 소목돈 (Google 수퍼 세트)은 정말 멋지다. 제 질문은 중첩 컬렉션을 다루는 간단한 방법이 있습니까? 예를 들어, I 행의 목록 인 매트릭스를 가지고 있고, 각 행 번호의 목록이다 :google 구아바 중첩 소목목

List<ArrayList<Integer>> matrix = Lists.newArrayList(// 
      Lists.newArrayList(1, 2, 3), // 
      Lists.newArrayList(4, 5, 6), // 
      Lists.newArrayList(7, 8, 9)); 

I 출력을 행 세퍼레이터로서 새로운 라인을 사용하여이 기질을 원하는 "," 숫자의 구분 기호로 사용됩니다. 즉이다 : 그것은 단지 하나의 행 인 경우

1, 2, 3 
4, 5, 6 
7, 8, 9 

, 나는 단순히 "Joiner.on (", "). nums"와 같은 일부 코드를 사용할 수 있습니다. 이 중첩 된 경우, 모든 행을 반복해야합니다.

더 세련된 방법이 있습니까?

감사합니다.

답변

5

루핑은 나에게 잘 보입니다. 즉,이 할 수있는 말했다 : 당신은하지만, 하나의 StringBuilder에 추가 모든 텍스트를 가질 수 없기 때문에

// implementation is simple enough 
public static Function<Iterable<?>, String> joinFunction(Joiner joiner) { ... } 

String string = Joiner.on('\n').join(
    Iterables.transform(matrix, joinFunction(Joiner.on(", ")))); 

당신이 어떤 효율성을 잃고, 나는 루프 아마 쉽게 이해할 수있을 거라고 생각 .

0

자바 8에서, 하나는 사용할 수 람다 :

String s = matrix.stream() 
      .map(row -> row.stream().map(Object::toString).collect(Collectors.joining(","))) 
      .collect(Collectors.joining("\n"));