将列表迭代转换为带有条件的 forEach



我有一个项目列表。我正在迭代列表,如果列表中存在下一个元素,我将附加一个逗号,如果这是最后一个元素,我将附加一个"!"。

而不是使用 for 循环,这可以用 forEach 来完成吗?

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("!");
}
});

如何检查每个中的 i+1 条件...

似乎您应该使用String.join函数。像这样:

String.join(",", list1) + "!"

您可以尝试使用流。 使用 Collectors.join 方法的解决方案:

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("!");

如果您必须使用"forEach",那么以下内容将起作用:

StringJoiner sj = new StringJoiner(",", "", "!");
list1.forEach(l -> sj.add(l));
System.out.println(sj.toString());
list1.forEach((k,s) -> {
sb.append(s);
if(k + 1 < list1.size()) {
sb.append(",");
} else {
sb.append("!");
}
});

如果要使用forEach查找其他示例,请参阅此链接。

这对我有用。如果列表为空,则 StringBuffer 也是,因为它不会进入 foreach 部分。

list1.forEach(s -> {
sb.append(s);
if(list1.indexOf(s) + 1 != list1.size()) {
sb.append(",");
} else {
sb.append("!");
}
});

最新更新