Javaの8つのストリームは、最新のエントリを維持する削除重複を減らします

ネスターMilyaev:

私のような、Java Beanを持っています

class EmployeeContract {
    Long id;
    Date date;
    getter/setter
}

私たちはidでなく、のような別の日付、との重複を持っているこれらの長いリストを持っている場合:

1, 2015/07/07
1, 2018/07/08
2, 2015/07/08
2, 2018/07/09

どのように私は、次のような最新の日付のエントリだけが、維持するようなリストを減らすことができます。

1, 2018/07/08
2, 2018/07/09

好ましくはJavaの8を使用して...

私のような何かを開始しました:

contract.stream()
         .collect(Collectors.groupingBy(EmployeeContract::getId, Collectors.mapping(EmployeeContract::getId, Collectors.toList())))
                    .entrySet().stream().findFirst();

それは私に、個々のグループ内のマッピングを提供しますが、私は結果リストにそれを収集する方法のようにこだわっている - 私の流れが強すぎる、私は怖いではありません...

ユージン:

まあ、私は答えの形でここに私のコメントを置くつもりです。

 yourList.stream()
         .collect(Collectors.toMap(
                  EmployeeContract::getId,
                  Function.identity(),
                  BinaryOperator.maxBy(Comparator.comparing(EmployeeContract::getDate)))
            )
         .values();

これはあなたを与えるだろうCollectionの代わりにしList、あなたが本当にこの心配している場合、。

おすすめ

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