Java Streams:有更简洁的方法吗?

时间:2015-03-04 17:05:02

标签: java functional-programming java-8 java-stream

我使用流来连接一系列字符串并在它们之间添加逗号,但结果字符串的开头或结尾必须没有逗号。

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()方法来删除最后一个逗号?

2 个答案:

答案 0 :(得分:3)

通常的习惯用法是使用Streams加入Collector

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);

但我不建议这样做。

答案 1 :(得分:0)

是的,您可以在此处使用Collectors.joining()

String joined = words.stream().collect(Collectors.joining(", "));

或者,正如评论中所述,您可以使用新添加的String.join(CharSequence, Iterable)方法。

String joined = String.join(", ", words);