Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Streams:有没有更干净的方法?_Java_Functional Programming_Java 8_Java Stream - Fatal编程技术网

Java Streams:有没有更干净的方法?

Java Streams:有没有更干净的方法?,java,functional-programming,java-8,java-stream,Java,Functional Programming,Java 8,Java Stream,我使用streams连接一系列字符串并在它们之间添加逗号,但结果字符串的开头或结尾不能有逗号 import java.util.Arrays; import java.util.List; public class QuestionNine { public static void main(String[] args) { new QuestionNine().launch(); } public void launch(){ List

我使用streams连接一系列字符串并在它们之间添加逗号,但结果字符串的开头或结尾不能有逗号

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);
    }
}
导入java.util.array;
导入java.util.List;
公开课问题九{
公共静态void main(字符串[]args){
新问题九()启动();
}
公开发售(){
List words=Arrays.asList(“你好”,“你好”,“引擎”,“万岁”,“什么”,
“狗”、“船”、“蛋”、“女王”、“Soq”、“Eet”);
字符串结果=(words.stream().map(str->str+“,”).reduce(“,(a,b)->a+b));
result=result.substring(0,result.length()-1);//删除最后一个逗号
系统输出打印项次(结果);
}
}

除了在末尾使用
String.substring()
方法来删除最后一个逗号之外,还有什么方法可以删除流管道中的最后一个逗号吗?

是的,您可以在此处使用
收集器。joining()

String joined = words.stream().collect(Collectors.joining(", "));
或者,正如注释中所指出的,您可以使用新添加的方法


通常的习惯用法是将
收集器
与流连接起来

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);
但我不建议这样做。

只需使用
String#join
。或者使用
收集器收集流。连接(“,”
或:words.stream().reduce((a,b)->a+”,“+b).orElse(“”);用番石榴:
Joiner.on(“,”).join(单词)
.stream().reduce("", (a,b) -> a.isEmpty() ? b : a+","+b);