我们可以从Java 8流中收集两个列表吗?

use*_*187 2 java java-8 java-stream

考虑我有一个列表,其中包含两种类型的数据,一种是有效的,另一种是无效的.

如果我开始过滤此列表,我可以在最后收集两个列表吗?

dav*_*xxx 6

我们可以从Java 8流中收集两个列表吗?

如果你有办法List根据条件对s的元素进行分组,你不能不这样做.在这种情况下,您可以使用Collectors.groupingBy()将返回Map<Foo, List<Bar>>其中Map两个List 的值的值.

请注意,在您的情况下,您不需要流只进行过滤.

使用过滤无效列表removeIf()并在第一个列表中添加其中的所有元素:

invalidList.removeIf(o -> conditionToRemove);
goodList.addAll(invalidList);      
Run Code Online (Sandbox Code Playgroud)

如果你不想改变状态goodList你可以做一个浅的副本:

invalidList.removeIf(o -> conditionToRemove);
List<Foo> terminalList = new ArrayList<>(goodList);
terminalList.addAll(invalidList);
Run Code Online (Sandbox Code Playgroud)


Ste*_*n C 2

另一个建议:使用 a 进行过滤lambda,将要从流中过滤的元素添加到单独的列表中。