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 变量的主要内容,如果未能解决你的问题,请参考以下文章