我有一个如下所示的列表
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中做到这一点吗?
答案 0 :(得分:7)
您需要通过join
delimiter
。在这种情况下,分隔符将是,
;但你可以选择任何你想要的。
String result = fruits.stream().collect(Collectors.joining(","));
System.out.println(result);
答案 1 :(得分:4)
Java8引入了一个 StringJoiner ,它可以满足您的需要(是另一种替代方式来评论)
StringJoiner sj = new StringJoiner("-,-");
fruits.forEach(item -> sj.add(item));
这里是doc
编辑:
你可以做的后代:
String result = fruits.stream().collect(Collectors.joining(","));
System.out.println(result);
或
String stringFruits = String.join(", ", fruits);
System.out.println(stringFruits);
信用并感谢@Holger
答案 2 :(得分:3)
你根本不需要手工完成。如果您的来源是List
,则可以使用
String stringFruits = String.join(", ", fruits);
System.out.println(stringFruits);
String.join(…)
的第一个参数是分隔符。
答案 3 :(得分:1)
或Java8之前的解决方案:
String combined = "";
for (String s : fruits) {
combined += s;
}
...还有一个带分隔符:
String combined = "";
for (String s : fruits) {
combined = combined + ", " + s;
}