如何使用 Java 8 流按条件分隔列表
2022-09-02 03:21:55
请考虑以下代码:
List<Integer> odd = new ArrayList<Integer>();
List<Integer> even = null;
List<Integer> myList = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
even = myList.stream()
.filter(item -> {
if(item%2 == 0) { return true;}
else {
odd.add(item);
return false;
}
})
.collect(Collectors.toList());
我在这里试图做的是将列表中的偶数和奇数值放入单独的列表中。
流方法返回偶数项,流收集器将收集它们。
对于奇怪的情况,过滤器将返回,并且项目将永远不会到达收集器。filter()
true
false
因此,我正在将此类奇数添加到我之前在块下创建的另一个列表中。else
我知道这不是处理流的优雅方式。例如,如果我使用并行流,那么奇数列表将存在线程安全问题。由于性能原因,我无法使用不同的过滤器多次运行它(应该是O(n))。
这只是一个用例的示例,列表可以包含任何对象,并且过滤器内的lambda需要根据某些逻辑将它们分离到单独的列表中。
简单来说:从列表中创建多个列表,其中包含根据某些条件分隔的项目。
如果没有流,只需运行 for 循环并执行简单的 if-else 并根据条件收集项目。