Sie können dies ohne Guava tun.
Collections bietet min
und max
Methoden, die auf jeder Sammlung funktionieren, einschließlich Überladungen unter Verwendung von Komparatoren. Hier verwenden wir die Java 8 Vergleicher statische Methoden mit einem Lambda knapp einen Komparator angeben, aber vor Java 8 können Sie eine anonyme Klasse verwenden:
Item max = Collections.max(list, Comparator.comparingInt(i -> i.price));
Diese Methoden NoSuchElementException werfen, wenn die Sammlung leer ist.
Java 8 Ströme liefern min
und max
Funktionen einen Komparator nehmen. Diese Funktionen geben Optional<T>
zurück, um den Strom, der leer ist, ordnungsgemäß zu behandeln. Die statischen Methoden in Comparator eignen sich zum präzisen Festlegen von Komparatoren, einschließlich des allgemeinen Falls der natürlichen Reihenfolge. Bei dieser Frage würden Sie verwenden
Optional<Item> max = list.stream().max(Comparator.comparingInt(i -> i.price));
Dies ist für jede Stromquelle arbeiten, die alle Sammlung Implementierungen enthält, sowie andere Dinge, wie Dateien und machen es einfach, die max eine Teilmenge von a zu berechnen Sammlung durch Filtern des Streams. Wenn Sie eine große Sammlung und einen teuren Vergleicher haben (z. B. die natürliche Reihenfolge von String), können Sie einen parallelen Stream verwenden.
(abgesehen. Idealerweise Strom würde min
und max
Überlastungen kein Argument zu nehmen, wenn der Stream-Typ implementiert Comparable Leider Java unterstützt keine bedingt Methoden basierend auf einem Typ-Parameter Belichtung, und es lohnt sich nicht, eine neue StreamOfComparable Einführung Interface extending Stream nur für diesen Fall.)
wenn der Preis nicht int ist. Sind Sie in Guava-Art, diesen Ansatz zu verwenden? – gstackoverflow
Die Art des Preises ist irrelevant. Sie müssen nur eine Bestellung angeben, die Artikel nach Preis vergleicht. Nehmen wir an, es ist BigDecimal, Sie würden 'return left.price.compareTo (right.price)' verwenden. –