繁体   English   中英

使用java8过滤器比较两个Integer列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM