Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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
java8 lambda表达式和foreach的问题_Java_Lambda - Fatal编程技术网

java8 lambda表达式和foreach的问题

java8 lambda表达式和foreach的问题,java,lambda,Java,Lambda,我有一个如下的清单 List<String> fruits = new ArrayList<>(); fruits.add("apple"); fruits.add("mango"); fruits.add("grapes"); System.out.println(fruits.toString()); 它工作得很好,我的要求是我需要迭代列表并将项目连接到字符串 String stringFruits = ""; fruits.forEach(item->str

我有一个如下的清单

List<String> fruits = new ArrayList<>();
fruits.add("apple");
fruits.add("mango");
fruits.add("grapes");
System.out.println(fruits.toString());
它工作得很好,我的要求是我需要迭代列表并将项目连接到字符串

String stringFruits = "";
fruits.forEach(item->stringFruits = stringFruits+item);

这给出了一个编译时错误,即lambda中使用的变量值应该是有效的final在java 8中有什么方法可以这样做吗?

您需要通过
分隔符
连接
。在这种情况下,分隔符将是
;但是你可以选择任何你想要的

 String result = fruits.stream().collect(Collectors.joining(","));
 System.out.println(result);

或者是Java8之前的解决方案:

String combined = "";
for (String s : fruits) {
   combined += s;
}
。。。还有一个带分隔符:

String combined = "";
for (String s : fruits) {
   combined = combined + ", " + s;
}

Java8引入了一个StringJoiner,它可以满足您的需要(是ERAN注释的另一种替代方法)

这是

编辑:

对于子孙后代,你也可以这样做:

String result = fruits.stream().collect(Collectors.joining(","));
System.out.println(result);


感谢@Holger

您根本不需要手工操作。如果您的源代码是
列表
,则可以使用

String stringFruits = String.join(", ", fruits);
System.out.println(stringFruits);

到的第一个参数是分隔符。

字符串stringFruits=fruits.stream().collect(Collectors.joining())@Eran感谢它解决了一个小问题。在这种情况下,有一种简单方便的方法……由于这非常实用,因此……在循环时,通常最好使用
StringBuilder
。在循环中,浓缩速度会以指数级的速度减慢。
String result = fruits.stream().collect(Collectors.joining(","));
System.out.println(result);
String stringFruits = String.join(", ", fruits);
System.out.println(stringFruits);
String stringFruits = String.join(", ", fruits);
System.out.println(stringFruits);