Java 将for循环转换为流
我有下面的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 (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())));