使用条件将列表迭代转换为forEach

时间:2018-08-16 08:56:08

标签: java

我有一个物品清单。我正在遍历该列表,如果列表中存在下一个元素,则要添加逗号,如果这是最后一个元素,则要添加“!”。

可以使用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条件...

5 个答案:

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