Google Guava中的Joiner(谷歌收藏的超集)非常酷。我的问题是,有一种简单的方法来处理嵌套集合吗? 例如,我有一个矩阵,它是一个行列表,每行都是一个数字列表:
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(”,“)。nums”。对于这个嵌套的情况,我必须循环所有行。
有更优雅的方式吗?
谢谢!
答案 0 :(得分: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
,但我认为循环可能更容易理解。
答案 1 :(得分:0)
在Java 8中,可以使用lambda:
String s = matrix.stream()
.map(row -> row.stream().map(Object::toString).collect(Collectors.joining(",")))
.collect(Collectors.joining("\n"));