簡體   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