将for循环转换为流

时间:2019-02-27 17:26:39

标签: java lambda java-8 java-stream

我有下面的for循环,我需要使用collection流来保持与其他代码的一致性。

for (int i = 0; i < res.getAllLists().size(); i++) {
    if (dataRes.getData().getId().equalsIgnoreCase(
            String.valueOf(res.getAllLists().get(i).getId()))) {
        res.getAllLists().remove(i);
    }
}

2 个答案:

答案 0 :(得分:0)

要有条件地从集合中删除元素,请使用removeIf(Predicate<? super E> filter)方法。

请注意,它不按照问题的要求使用流处理,而是使用Lambda表达式,因此它是较新的Java 8“功能”语法。

res.getAllLists().removeIf(list -> dataRes.getData().getId().equalsIgnoreCase(
                                       String.valueOf(list.getId())));

答案 1 :(得分:0)

如果您确实需要使用Stream,可以这样做

res.setAllLists(
    res.getAllLists().stream()                          // convert list to stream
        .filter(line -> !dataRes.getData().getId().equalsIgnoreCase(line))     // filter to keep only the non equal items
        .collect(Collectors.toList()));                 // convert back to a list

但是List上的Lamda表达式是一种更简洁的方法,并且避免了引入Stream会带来的性能开销

res.getAllLists().removeIf(list -> dataRes.getData().getId().equalsIgnoreCase(String.valueOf(list.getId())));