首页 > 解决方案 > Java 8 流,过滤掉 Array 并获取计数,然后遍历数组直到前一个 Count 变量

问题描述

例如,我有一个数组

List<Integer> myArray = Arrays.asList(4, 13, 10, 21, 20);

我想计算这个数组中的总偶数,所以我使用了这样的东西:

int evenCount = (int)myArray.stream().filter(i -> i % 2 == 0).count();

所以在这种情况下 count 应该是3,但是我想要一些干净简洁的代码,并且可能将更多的方法链接在一起来遍历同一个数组,但直到我刚刚计算的这个 数值,然后计算下面的奇数个数这条边界线,类似于:

return IntStream.range(0, evenCount-1).filter(i -> i % 2 !=0).count();

有没有更好的方法在 1 行中做到这一点?我觉得我重复循环了 2 次,但可以在第一个循环(迭代)中解决问题......

标签: javalambdafunctional-programmingjava-stream

解决方案


是的,在这种情况下,您可以

    Map<Boolean, Long> result = List.of(4, 13, 10, 21, 20).stream()
            .collect(Collectors.partitioningBy(e -> e % 2 == 0, Collectors.counting()));

    System.out.println("result = " + result); // result = {false=2, true=3}

推荐阅读