Vic*_*azi 2 reduce java-8 java-stream
是否有一种更优雅的方式来加入流的元素,用"\n"分隔每个元素,但不以"\n"开头,而不必像下面的例子那样进行子串(1)调用?
List<String> strings = someList;
String rval = strings.stream()
.map(this::someOperation)
.reduce("", (p1, p2) -> p1 + "\n" + p2);
if(rval.length() > 0)
{
// trim off the leading "\n"
rval = rval.substring(1);
}
return rval;
}
Run Code Online (Sandbox Code Playgroud)
当然我可以用内部循环替换它,但这会失去明显的功能可读性
使用
.collect(Collectors.joining("\n"))
Run Code Online (Sandbox Code Playgroud)
通过不创建大量临时字符串和副本,它将解决您的问题,更具可读性,并且更有效率.
有特定的收集器可以有效地处理字符串.如果你看一下Collectors.joining,你会发现你所寻找的东西很简单:
String joined = strings.stream()
.map(this::someOperation)
.collect(Collectors.joining("\n"));
Run Code Online (Sandbox Code Playgroud)