Puede hacerlo sin guayaba.
Collections proporciona min
y max
métodos que operan en cualquier colección, incluidas las sobrecargas que toman comparadores. Aquí utilizamos los métodos estáticos de Java 8 comparador con una lambda para especificar de forma concisa un comparador, pero antes de Java 8 Puede utilizar una clase anónima:
Item max = Collections.max(list, Comparator.comparingInt(i -> i.price));
Estos métodos se lanzan NoSuchElementException si la colección está vacía.
Java 8 arroyos proporcionan min
y max
funciones que toman un comparador. Estas funciones devuelven Optional<T>
para manejar correctamente la secuencia que está vacía. Los métodos estáticos en el Comparador son útiles para especificar comparadores de forma concisa, incluido el caso común del ordenamiento natural. Para esta pregunta, que tendría que utilizar
Optional<Item> max = list.stream().max(Comparator.comparingInt(i -> i.price));
Esto funcionará para cualquier fuente de corriente, que incluye todas las implementaciones Collection, así como otras cosas como archivos, y hace que sea fácil de calcular el máximo de un subconjunto de una colección al filtrar la secuencia. Si tiene una gran colección y un comparador costoso (por ejemplo, el ordenamiento natural de String), puede usar una transmisión paralela.
(Aparte:. Idealmente corriente proporcionaría min
y max
sobrecargas que toman ningún argumento cuando el tipo de corriente implementa Comparable Desafortunadamente Java no soporta condicionalmente la exposición de los métodos basados en un parámetro de tipo, y no vale la pena introducir un nuevo StreamOfComparable interfaz que extiende Stream solo para este caso.)
si el precio no es int. ¿Están en guayaba la manera de usar este enfoque? – gstackoverflow
El tipo de precio es irrelevante. Solo necesita proporcionar un pedido que compare los artículos por precio. Digamos que es BigDecimal, debería usar 'return left.price.compareTo (right.price)'. –