Java 8 流,过滤掉 Array 并获取计数,然后遍历数组直到前一个 Count 变量

Posted

技术标签:

【中文标题】Java 8 流,过滤掉 Array 并获取计数,然后遍历数组直到前一个 Count 变量【英文标题】:Java 8 streams , filter out Array and get count, then iterate through array up to previous Count variable 【发布时间】:2021-02-11 04:17:33 【问题描述】:

我有一个数组,例如

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

我想得到这个数组中总 even 个 nums 的计数,所以我使用了这样的东西:

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

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

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

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

【问题讨论】:

如果您需要计算所有偶数并将其用作索引,则必须迭代两次。否则,您需要在第一次遍历时维护一个复杂的索引,它可以描述每个偶数索引和在它之前找到的奇数值的计数。 【参考方案1】:

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

    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

【讨论】:

以上是关于Java 8 流,过滤掉 Array 并获取计数,然后遍历数组直到前一个 Count 变量的主要内容,如果未能解决你的问题,请参考以下文章

过滤计数等于输入文件 rdd Spark 的列

java 8流多个过滤器

是否可以在 Java 8 中转换流?

Java8_Stream_创建

php数组的重复值如何过滤掉

Java 8 Stream 按键过滤对象列表。排除列表中的键并获取字符串