[英]Comparing two Integer list using java8 filter
我有一个问题如下。 有两个整数列表a和b具有相同的大小。 现在我想比较同一索引的两个列表值。 我的函数返回包含2个值的列表。 第一个值是列表a中更大的值的计数。 第二个值是列表b中更大的值的计数。 如果两者具有相同的值而不是计数的增量。
我可以了解如何使用流/过滤器/谓词在java8中实现它
我在旧的Java版本中重新使用了该方法。
static List<Integer> compareTriplets(List<Integer> a, List<Integer> b) {
List<Integer> list = new ArrayList<Integer>();
int asize = 0;
int bsize = 0;
for (int i = 0; i <b.size();i++) {
if(a.get(i) > b.get(i)) {
asize++;
}else if(a.get(i) < b.get(i)) {
bsize++;
}
}
list.add(asize);
list.add(bsize);
return list;
}
[点拨。 输入:a = 5 6 7 b = 3 6 10输出:1 1例如2.输入:a = 17 28 30 b = 99 16 8输出:2 1
首先筛选出所有相等的值。 然后,创建用布尔键地图,表示给定值是否a
比对应的值小于或大于b
。 最后使用计数收集器来获取每个类别的计数。 这是它的外观。
Collection<Long> gtAndLtCount = IntStream.range(0, a.size())
.filter(i -> a.get(i) != b.get(i)).boxed()
.collect(Collectors.partitioningBy(i -> a.get(i) < b.get(i), Collectors.counting()))
.values();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.