java - 在一个流处理中收集匹配和不匹配?

标签 java java-8 java-stream

有没有办法在一次处理中同时收集匹配和不匹配的流元素? 举个例子:

final List<Integer> numbers = Arrays.asList( 1, 2, 3, 4, 5 );
final List<Integer> even = numbers.stream().filter( n -> n % 2 == 0 ).collect( Collectors.toList() );
final List<Integer> odd = numbers.stream().filter( n -> n % 2 != 0 ).collect( Collectors.toList() );

有没有办法避免两次遍历数字列表?像“匹配的收集器和不匹配的收集器”之类的东西?

最佳答案

你可以这样做,

final Map<Boolean, List<Integer>> parityMap = numbers.stream()
        .collect(Collectors.partitioningBy(n -> n % 2 == 0));
final List<Integer> even = parityMap.get(true);
final List<Integer> odd = parityMap.get(false);

关于java - 在一个流处理中收集匹配和不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53296841/

相关文章:

java - 将一个spliterator拆分成N个spliterator

java - 解释性能差异

java - 如何在 java8 中使用流重写以下代码

java - 如何使用纯阿拉伯文本实现 Struts 2 i18n?

java - 递归方法的返回值(java)

Java 可选参数化接口(interface)

java - 在添加到 map 之前如何过滤收集器中方法调用的数据

java - Jakarta Taglibs 的良好替代品?

java - Struts 2 中的格式编号 <s :property/> tag

Java 流 : Issue about collect to a Map<String, 对象>