Java 将for循环转换为流

Java 将for循环转换为流,java,lambda,java-8,java-stream,Java,Lambda,Java 8,Java Stream,我有下面的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); } }

我有下面的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);
    }
}
for(int i=0;i
要有条件地从集合中删除元素,请使用以下方法

请注意,这并不使用问题中要求的流处理,而是使用Lambda表达式,因此它是较新的Java8“函数”语法


如果您真的需要使用
,您可以这样做

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
但是
列表
上的Lamda表达式是一种更干净的方法,避免了引入
所带来的性能开销

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

欢迎来到StackOverflow。本社区不接受代码请求。该网站旨在提供问题和答案。请编写您需要编写的代码,如果您遇到任何问题,欢迎您就您的问题提出问题。顺便说一句,此代码似乎并不正确。无论何时从列表中删除一个元素,列表的其余部分都会移动一个空间。所以如果你在位置3,删除元素3,原来的元素4现在就是元素3。但是您的
for
循环不会查看它,因为在删除后它将移动到4。除了使用接口之外,没有必要“与其他代码保持一致”,例如此代码已经使用的收集API。但是无论如何,您可以简单地使用
res.getAllLists().removeIf(obj->dataRes.getData().getId().equalsIgnoreCase(String.valueOf(obj.getId()))虽然对似乎应该表示ID的内容的字符串表示进行不区分大小写的比较没有多大意义。但是执行
res.getAllLists().removeIf(obj->dataRes.getData().getId().equals(obj.getId())更合理
res.getAllLists().removeIf(list -> dataRes.getData().getId().equalsIgnoreCase(String.valueOf(list.getId())));