Możesz to zrobić bez Guawy.
Kolekcje udostępniają metody, które działają na dowolnej kolekcji, w tym przeciążenia pobierające komparatory. Tutaj używamy Java 8 Komparator metody statyczne z lambda do zwięźle określić komparator, ale przed 8 Java można użyć anonimowego Klasa:
Item max = Collections.max(list, Comparator.comparingInt(i -> i.price));
Te metody będą rzucać NoSuchElementException jeśli kolekcja jest pusta.
Java 8 strumienie zapewnić min
i max
zadań bierze komparator. Te funkcje zwracają Optional<T>
, aby zręcznie obsługiwać pusty strumień. Metody statyczne w Komparatorze są przydatne do zwięzłego określania komparatorów, w tym wspólnego przypadku uporządkowania naturalnego. Na to pytanie, można użyć
Optional<Item> max = list.stream().max(Comparator.comparingInt(i -> i.price));
To będzie pracować dla dowolnego źródła strumienia, który obejmuje wszystkie implementacje Collection, jak również inne rzeczy, takie jak pliki, i sprawia, że łatwo obliczyć max podzbiorem kolekcja przez filtrowanie strumienia. Jeśli masz dużą kolekcję i kosztowny komparator (np. Naturalne zamówienie String), możesz użyć strumienia równoległego.
(bok. Idealnie Stream zapewni min
i max
przeciążeń sobą nie argument, gdy typ strumienia realizuje Porównywalne Niestety Java nie obsługuje warunkowo odsłaniając metody oparte na parametrze typ, a to nie jest warte wprowadzenia nowego StreamOfComparable interfejs rozszerzający Strumień tylko dla tego przypadku.)
jeśli cena nie jest równa int. Czy guava jest sposobem na zastosowanie tego podejścia? – gstackoverflow
Rodzaj ceny jest nieistotny. Wystarczy podać zamówienie, które porównuje produkty według ceny. Powiedzmy, że to BigDecimal, użyjesz 'return left.price.compareTo (right.price)'. –