猿问

将 for 循环转换为流

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


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);

    }

}


慕雪6442864
浏览 273回答 2
2回答

呼如林

如果你真的需要使用 aStream你可以这样做res.setAllLists(&nbsp; &nbsp; res.getAllLists().stream()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // convert list to stream&nbsp; &nbsp; &nbsp; &nbsp; .filter(line -> !dataRes.getData().getId().equalsIgnoreCase(line))&nbsp; &nbsp; &nbsp;// filter to keep only the non equal items&nbsp; &nbsp; &nbsp; &nbsp; .collect(Collectors.toList()));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// convert back to a list但是,Lamda Expression onList是一种更简洁的方法,并且避免了引入Stream会带来的性能开销res.getAllLists().removeIf(list -> dataRes.getData().getId().equalsIgnoreCase(String.valueOf(list.getId())));

泛舟湖上清波郎朗

要有条件地从集合中删除元素,请使用该removeIf(Predicate<? super E> filter)方法。请注意,这不使用问题中要求的流处理,而是使用 Lambda 表达式,因此它是较新的 Java 8“功能”语法。res.getAllLists().removeIf(list&nbsp;->&nbsp;dataRes.getData().getId().equalsIgnoreCase( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String.valueOf(list.getId())));
随时随地看视频慕课网APP

相关分类

Java
我要回答