我有下面的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);
}
}
答案 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())));