[英]Java Streams: Is there a cleaner way of doing this?
我正在使用流连接一系列字符串并在它们之间添加逗号,但是结果字符串的开头或结尾必须没有逗号。
import java.util.Arrays;
import java.util.List;
public class QuestionNine {
public static void main(String[] args) {
new QuestionNine().launch();
}
public void launch(){
List<String> words = Arrays.asList("Hello", "Bonjour", "engine", "Hurray", "What",
"Dog", "boat", "Egg", "Queen", "Soq", "Eet");
String result = (words.stream().map(str -> str + ",").reduce("", (a,b) -> a + b));
result = result.substring(0, result.length() -1); //removes last comma
System.out.println(result);
}
}
而不是最后使用String.substring()
方法摆脱最后一个逗号,有没有一种方法可以删除流管道中的最后一个逗号?
通常的习惯用法是将加入的Collector
与Streams一起使用。
String res = words.stream().collect(Collectors.joining(","));
虽然你可以使用String.join
你的情况,因为你是直接与处理Iterable
。
String res = String.join(",", words);
您的方法的问题在于,您应用的映射函数会在每个单词的末尾加上一个逗号。 您可以摆脱这种映射。 并应用reduce函数,以便获得所需的输出:
.stream().reduce("", (a,b) -> a.isEmpty() ? b : a+","+b);
但我不建议这样做。
是的,您可以在此处使用Collectors.joining()
:
String joined = words.stream().collect(Collectors.joining(", "));
或者,也可以从注释中注意到,可以使用新添加的String.join(CharSequence, Iterable)
方法。
String joined = String.join(", ", words);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.