是否有一种更优雅的方式来连接流的元素,而不用“\ n”开头,而用“\ n”分隔每个元素,而不必像下面的示例中那样进行substring(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;
}
当然我可以用内部循环替换它,但是那样会失去明显的功能可读性
最佳答案
有一些特定的收集器可以有效地处理字符串。如果您查看 Collectors.joining
,那么您会发现它确实是您想要的:
String joined = strings.stream()
.map(this::someOperation)
.collect(Collectors.joining("\n"));