Google Guava(Google集合的超集)中的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“。对于这种嵌套情况,我必须循环所有行。
有没有更优雅的方式?
谢谢!
最佳答案
循环对我来说似乎很好。也就是说,您可以执行以下操作:
// 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
上,而且我认为循环可能更容易理解。