Così ho una collezione di oggetti che hanno una variabile passo che può essere 1 - 4.Java 8 Stream - .max() con i duplicati
public class MyClass {
private Long step;
//other variables, getters, setters, etc.
}
Collection<MyClass> myOjbects = /*get collection*/;
Poi vorrei ottenere un'istanza MyClass
dalla collezione che ha il valore massimo passaggio, quindi fare:
final Optional<MyClass> objectWithMaxStep =
myObjects.stream().max(Comparator.comparing(MyClass::getStep));
Tuttavia, vi sono situazioni in cui ci saranno più MyClass
ins tance nella raccolta che hanno un passo uguale a 4.
Quindi, la mia domanda è, come viene determinata quale istanza viene restituita nello Optional
o genera un'eccezione quando più oggetti nel flusso hanno il valore massimo che viene confrontato?
La documentazione Java 8 per la funzione max()
non specifica cosa si verificherà in questa situazione.
Perché l'ordine è importante se sono uguali? – the8472
Per l'esempio particolare in cui lo sto usando, non ha molta importanza, dal momento che sto solo tirando il passo dall'oggetto restituito. Tuttavia, ci sono altre variabili nella classe, quindi essere sullo stesso passo non significa che gli oggetti siano uguali. Quindi in altre situazioni, potrebbe importare quale oggetto viene restituito. Il motivo della mia domanda era principalmente capire come funziona la funzione 'max()' quando più oggetti hanno lo stesso valore nel campo che viene confrontato. –
E perché non usare un comparatore concatenato che includa quelle altre variabili se contano? – the8472