繁体   English   中英

java8 lambda表达式和foreach的问题

[英]Issue with java8 lambda expression and foreach

我有一个如下所示的列表

List<String> fruits = new ArrayList<>();
fruits.add("apple");
fruits.add("mango");
fruits.add("grapes");
System.out.println(fruits.toString());

我正在使用lambda表达式来打印列表

fruits.forEach(item->System.out.println(item));

并且它的工作正常我的要求是我需要迭代列表并将项连接到字符串

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

这是一个编译时错误,说lambda中使用的变量值应该是有效的最终是否有任何方式我可以在java 8中做到这一点?

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

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

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

StringJoiner sj = new StringJoiner("-,-");
fruits.forEach(item -> sj.add(item));

这里的文件

编辑:

对于你可以做的后代:

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

要么

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

致谢并感谢@Holger

你根本不需要手工完成。 如果您的源是List ,则可以使用

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

String.join(…)的第一个参数是分隔符。

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

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

......还有一个带分隔符:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM