2011-10-05 48 views
4

Google Guava中的木匠(Google收藏的超集)非常酷。我的問題是,是否有一個簡單的方法來處理嵌套集合? 例如,我有一個矩陣,該矩陣是一個行的列表,並且每一行是數字的列表:谷歌番石榴嵌套木匠

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

我要輸出通過使用新的線作爲行分離器和該矩陣「」作爲號碼的分隔符。那就是:

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

如果它僅僅是一個行,我可以簡單地使用像「Joiner.on(」「)訂購數量。」一些代碼。對於這個嵌套的情況,我必須循環所有的行。

有沒有更優雅的方式?

謝謝!

回答

5

循環對我來說似乎很好。這就是說,你可以

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

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

你正在失去一些效率,因爲你不能有附加到一個單一StringBuilder,雖然所有文字,我覺得一個循環可能會更容易理解。

0

在Java 8,可以使用拉姆達:

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