如何处理对象未能满足Java 8流中的过滤器

时间:2018-08-28 12:02:25

标签: java java-8

我正在尝试处理未能满足流中过滤条件的对象。

List<Integer> list = Arrays.asList(1,23,43,12,4,5);
list.stream().filter( i -> i > 10).collect(Collections.toList);

这将返回大于10的对象的列表,但我也想处理无法满足条件(> 10)的对象。

谢谢。

3 个答案:

答案 0 :(得分:9)

Map<Boolean, List<Integer>> map = list.stream()
              .collect(Collectors.partitioningBy(i > 10));


map.get(false/true).... do whatever you want with those that failed or not

答案 1 :(得分:2)

我只需使用stream()进行两次扫描,即可得到两个不同的列表:

List<Integer> list = Arrays.asList(1,23,43,12,4,5);

List<Integer> largerThanTen = list.stream().filter( i -> i > 10)
                                 .collect(Collectors.toList());
List<Integer> smallerOrEqualToTen = list.stream().filter( i -> i <= 10)
                                .collect(Collectors.toList());

我认为这比单行尝试更具可读性,从而减少了惯用的数据结构。

答案 2 :(得分:1)

List<Integer> list = Arrays.asList(1,23,43,12,4,5);
list.stream().filter( i -> i > 10).collect(Collections.toList);
  

更改为

Map < Boolean, List < Integer > > map = Stream.of( 1, 23, 43, 12, 4, 5 ).collect( Collectors.groupingBy( e -> e > 10 ) );

然后您可以使用

map.get( false )// is list of has not condition
map.get(true) // is list of has condition