【问题标题】:Comparing two Integer list using java8 filter使用java8过滤器比较两个整数列表
【发布时间】:2019-11-27 07:05:30
【问题描述】:

我有一个问题如下。有两个大小相等的整数列表 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

【问题讨论】:

    标签: java lambda java-8 stream java-stream


    【解决方案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();
    

    【讨论】:

    • 这就是我要找的。在返回 List 时,我又添加了一行。 ``` return new ArrayList(gtAndLtCount); ```
    猜你喜欢
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    相关资源
    最近更新 更多