Vous pouvez le faire sans la Goyave.
Collections fournit min
et max
méthodes qui fonctionnent sur n'importe quelle Collection, y compris surcharges de prendre des comparateurs. Ici, nous utilisons la Java 8 Comparaison des méthodes statiques avec un lambda de manière concise spécifier un comparateur, mais avant Java 8, vous pouvez utiliser une classe anonyme:
Item max = Collections.max(list, Comparator.comparingInt(i -> i.price));
Ces méthodes vont se jeter NoSuchElementException si la collection est vide.
Java 8 les cours d'eau fournissent min
et max
fonctions prenant un comparateur. Ces fonctions renvoient Optional<T>
pour gérer harmonieusement les flux de vide. Les méthodes statiques dans la Comparaison sont utiles pour, de façon concise, en précisant des éléments de comparaison, y compris celui de l'ordre naturel. Pour cette question, vous pourriez utiliser
Optional<Item> max = list.stream().max(Comparator.comparingInt(i -> i.price));
Cela fonctionne pour n'importe quel flux de la source, qui comprend la Collection de toutes les implémentations, ainsi que d'autres choses comme pour les fichiers, et il est facile de calculer le max d'un sous-ensemble d'une collection en filtrant les flux. Si vous avez une grande collection et un cher de comparaison (p. ex., Chaîne naturelle de la commande), vous pouvez utiliser un courant parallèle.
(Aparté: idéalement Flux de fournir de l' min
et max
des surcharges en ne prenant aucun argument lorsque les flux de type implémente Comparable. Malheureusement Java ne supporte pas conditionnellement de l'exposer à des méthodes basées sur un paramètre de type, et ce n'est pas la peine de l'introduction d'un nouveau StreamOfComparable de l'interface de l'extension de Flux de juste pour ce cas.)