同じ内容を持つリストの合計量

Tmrmria:

私は、次の内容を持っているタイプの「詳細」からSortedListがあります:

[0]=Details test0: 28.01.2020
[0]=Details test1: 1234
[0]=Details test2: abcd
[0]=Details test3: 1
[0]=Details test4: 20.6
[0]=Details test5: 20.20

[1]=Details test0: 28.01.2020
[1]=Details test1: 1234
[1]=Details test2: abcd
[1]=Details test3: 1
[1]=Details test4: 20.6
[1]=Details test5: 20.20

[2]=Details test0: 29.01.2020
[2]=Details test1: 1234
[2]=Details test2: abcd
[2]=Details test3: 1
[2]=Details test4: 20.7
[2]=Details test5: 20.20

今、ソートされたリストは、すべてのオブジェクトにこれを返しますが、私は同じTEST0、TEST1、TEST2と和TEST3、TEST4とTEST5(TEST3 + TEST3、TEST4 + TEST4とTEST5 + TEST5)ですべてを合計するとします。

[0]=Details test0: 28.01.2020
[0]=Details test1: 1234
[0]=Details test2: abcd
[0]=Details test3: 2
[0]=Details test4: 41.2
[0]=Details test2: 40.40

[1]=Details test0: 29.01.2020
[1]=Details test1: 1234
[1]=Details test2: abcd
[1]=Details test3: 1
[1]=Details test4: 2.7
[1]=Details test5: 20.20

私はかどうかわからないんだけどlist.stream().filter、この問題に対する最善の選択肢です。何か案は?すべてTEST0の重複を見つける必要がある二つの方法:

    public static List<Detail> getDuplicates(final List<Detail> list) {
    return getDuplicatesMap(list).values()
        .stream()
        .filter(duplicates -> duplicates.size() > 1)
        .flatMap(Collection::stream)
        .collect(Collectors.toList());
}

private static Map<String, List<Details>> getDuplicatesMap(List<Details> list) {
    return list.stream().collect(Collectors.groupingBy(Details::test0));
}
また:

あなたは、いくつかの属性に基づいて重複したエントリをマージし、ちょうど重複を識別されていません探しています。使用Collectors.toMapでは、mergeFunctionあなたがこれを解決するのに役立つはずです。

public static List<Details> getDuplicates(final List<Details> list) {
    return new ArrayList<>(list.stream()
            .collect(Collectors.toMap(dtl -> 
                            Arrays.asList(dtl.getTest0(), dtl.getTest1(), dtl.getTest2()), 
                    Function.identity(), Details::mergeDuplicates))
            .values());
}

マージ関数は、型特異的に使用されると仮定した場合Numberのように追加することができるのを:

static Details mergeDuplicates(Details a, Details b) {
    return new Details(a.getTest0(), a.getTest1(), a.getTest2(),
            a.getTest3() + b.getTest3(), a.getTest4() + b.getTest4(), a.getTest5() + b.getTest5());
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=4468&siteId=1