我有以下问题。有两个大小相等的整数列表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;
}
例如1。输入:a = 5 6 7 b = 3 6 10 输出: 1 1 例如2.输入:a = 17 28 30 b = 99 16 8 输出: 2 1
答案 0 :(得分:6)
首先过滤掉所有相等的值。然后使用布尔键创建一个映射,该映射表示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();