リストから複数の分の発生を取得

ZED:

私は、カスタムオブジェクトのリストを持っています:

List<CustomObject> customObjects;

そこから私は、最古のdatetime値が設定されている必要があり、すべてのオブジェクトを抽出したいと思います。

だから、クラスは次のようになります。

class CustomObject {
   LocalDateTime date;

   public LocalDateTime getDateTime() {
       return date;
   }
}

そして、私は正常にこのようなカスタムコンパレータ機能を持つ最も古い日付のリスト内のオブジェクトを見つけることができますよ。

private static LocalDateTime getDate(CustomObject customObject) {
        return customObject.getDateTime();
}

CustomObject customObjectMin = customObjects.stream().
           min(Comparator.comparing(MyUtilClass::getDate));

しかし、同じ日付で複数のカスタムオブジェクトを持つことが可能ですが、とそのシナリオで複数の発生を取得する方法はありませんように見えますmin最も早い日付を設定して、リスト内のすべてのオブジェクトを見つけるための簡単な解決策はありますか?このようなもの:

List<CustomObject> customObjectsMin = customObjects.stream().
           minWithAllOccurences(Comparator.comparing(MyUtilClass::getDate));
ピーターLawrey:

あなたは、2つの選択を行うことができます。

  • 分の日付を見つけるために1
  • その日付を持つものを見つけるために1

たとえば、

LocalDate min = customObjects.stream()
                             .map(CustomObject::getDateTime)
                             .min(Comparator.naturalOrder());
List<CustomObject> objs = customObjects.stream()
                             .filter(c -> min.equals(c.getDateTime()))
                             .collect(Collectors.toList());

それとも、TreeMapのにCollectors.groupingByを使用し、最初のエントリを取ることができます。

おすすめ

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