相关疑难解决方法(0)

如何使用Java 8流将条件与条件分开

请考虑以下代码:

 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());
Run Code Online (Sandbox Code Playgroud)

我在这里要做的是将列表中的偶数和奇数值分别放入单独的列表中.

stream filter()方法返回true偶数项,流收集器将收集它们.
对于奇数情况,过滤器将返回false,项目将永远不会到达收集器.

所以我在else块之前创建的另一个列表中添加了这些奇数.

我知道这不是一种优雅的流式处理方式.例如,如果我使用并行流,那么奇数列表将出现线程安全问题.由于性能原因,我不能使用不同的过滤器多次运行它(应该是O(n)).

这只是一个用例的示例,列表可以包含任何对象,并且过滤器内的lambda需要根据某些逻辑将它们分离到单独的列表中.

简单来说:从列表中创建多个列表,其中包含基于某些条件分隔的项目.

如果没有流,只需运行for循环并执行简单的if-else并根据条件收集项目.

java data-structures java-8 java-stream

17
推荐指数
1
解决办法
6216
查看次数

标签 统计

data-structures ×1

java ×1

java-8 ×1

java-stream ×1