Więc mam kolekcji obiektów, które mają zmienną krok, który może być 1 - 4.Java 8 Stream - .max() z duplikatów
public class MyClass {
private Long step;
//other variables, getters, setters, etc.
}
Collection<MyClass> myOjbects = /*get collection*/;
Następnie chciałbym dostać jedna instancja MyClass
z kolekcji, która ma maksymalną wartość kroku, tak robię:
final Optional<MyClass> objectWithMaxStep =
myObjects.stream().max(Comparator.comparing(MyClass::getStep));
Jednakże istnieją sytuacje, gdzie nie będzie wielokrotnością MyClass
ins tances w kolekcji, które mają krok równy 4.
Moje pytanie brzmi: w jaki sposób określa się, która instancja jest zwracana w Optional
, czy też generuje wyjątek, gdy wiele obiektów w strumieniu ma wartość maksymalną to jest porównywane?
Dokumentacja Java 8 dla funkcji max()
nie określa, co będzie miało miejsce w tej sytuacji.
Dlaczego zamówienie ma znaczenie, jeśli jest równe? – the8472
Dla konkretnego przykładu, dla którego go używam, nie ma to znaczenia, ponieważ tylko wyciągam krok ze zwróconego obiektu. Istnieją jednak inne zmienne w klasie, więc bycie na tym samym etapie nie oznacza, że obiekty są równe. W innych sytuacjach może to mieć znaczenie, który obiekt zostanie zwrócony. Powodem mojego pytania było przede wszystkim zrozumienie, jak działa funkcja 'max()', gdy wiele obiektów ma taką samą wartość w porównywanym polu. –
A dlaczego po prostu nie używać połączonego komparatora, w tym innych zmiennych, jeśli są one ważne? – the8472