我有一个物品清单。我正在遍历该列表,如果列表中存在下一个元素,则要添加逗号,如果这是最后一个元素,则要添加“!”。
可以使用forEach来代替for循环吗?
List<String> list1 = new LinkedList<>();
StringBuilder sb = new StringBuilder();
list1.add("one");
list1.add("two");
list1.add("three");
list1.add("four");
list1.add("five");
for(int i=0; i<list1.size();i++) {
sb.append(list1.get(i));
if(i+1 < list1.size()) {
sb.append(",");
} else {
sb.append("!");
}
}
我尝试过..
list1.forEach(s -> {
sb.append(s);
if() { // not sure how to check if next element is present..
sb.append(",");
} else {
sb.append("!");
}
});
如何在forEach中检查i + 1条件...
答案 0 :(得分:8)
似乎您应该使用String.join
函数。像这样:
String.join(",", list1) + "!"
答案 1 :(得分:5)
您可以尝试使用流。 使用Collectors.joining方法的解决方案:
list1.stream().collect(Collectors.joining(",")).concat("!");
使用流减少的解决方案:
list1.stream().reduce((a, b) -> a.concat(",").concat(b)).map(a -> a.concat(",")).orElse("");
当然,如果您不想使用流,可以对每个链调用执行以下操作。
list1.forEach(s -> sb.append(s).append(','));
String str = sb.toString().concat("!");
答案 2 :(得分:2)
如果必须使用“ forEach”,则可以执行以下操作:
StringJoiner sj = new StringJoiner(",", "", "!");
list1.forEach(l -> sj.add(l));
System.out.println(sj.toString());
答案 3 :(得分:1)
list1.forEach((k,s) -> {
sb.append(s);
if(k + 1 < list1.size()) {
sb.append(",");
} else {
sb.append("!");
}
});
如果要使用forEach
查找其他示例,请参见此link。
答案 4 :(得分:0)
对我有用。如果列表为空,则StringBuffer也为空,因为它不会进入foreach部分。
list1.forEach(s -> {
sb.append(s);
if(list1.indexOf(s) + 1 != list1.size()) {
sb.append(",");
} else {
sb.append("!");
}
});