使用条件将List Iteration转换为forEach

Jav*_*er1 0 java

我有一个项目清单.我正在迭代列表,如果列表中存在下一个元素,我会附加一个逗号,如果这是我追加"!"的最后一个元素.

而不是使用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("!");
    }
}
Run Code Online (Sandbox Code Playgroud)

我试过了..

list1.forEach(s -> {
    sb.append(s);
    if() { // not sure how to check if next element is present..
        sb.append(",");
    } else {
        sb.append("!");
    }
});
Run Code Online (Sandbox Code Playgroud)

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

mar*_*ran 8

好像你应该使用这个String.join功能.像这样的东西:

String.join(",", list1) + "!"
Run Code Online (Sandbox Code Playgroud)


dbl*_*dbl 5

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

list1.stream().collect(Collectors.joining(",")).concat("!");
Run Code Online (Sandbox Code Playgroud)

使用流减少的解决方案:

list1.stream().reduce((a, b) -> a.concat(",").concat(b)).map(a -> a.concat(",")).orElse("");
Run Code Online (Sandbox Code Playgroud)

当然,如果您不想使用流,您可以执行以下每个链调用.

list1.forEach(s -> sb.append(s).append(','));
String str = sb.toString().concat("!");
Run Code Online (Sandbox Code Playgroud)

  • 当你在`String`上有`join`函数时,不需要创建`Stream`. (3认同)