Ich versuche herauszufinden, wie man am besten die kleinste von zwei Zahlen ergreift, wenn die Zahlen Attribute innerhalb von zwei verschiedenen Objekten sind. Jeder, aber nicht beide der Objekte können null sein, was zu Nullzeigerausnahmen führen kann. Jedes Objekt verfügt über eine eigene getValue() -Methode, die einen Long-Wert zurückgibt. Es ist die grundlegende if/else, dass ich lieber nicht tun sollten:java finde die kleinste von zwei Zahlen, die von zwei verschiedenen Objekttypen kommen, wenn man null sein kann
if (obj1 != null && obj2 != null) { // neither object is null
minValue = obj1.getValue() <= obj2.getValue() ? obj1.getValue() : obj2.getValue();
} else if (obj1 == null && obj2 != null) { // only obj1 is null
minValue = obj2.getValue();
} else { // only obj2 is null (they can't both be null, so we don't need an if for the situation where they're both null)
minValue = obj1.getValue();
}
Ich habe versucht, ein paar andere Dinge:
// can throw null pointer exception
Collections.min(Arrays.asList(obj1.getValue(), obj2.getValue()));
// while both objects have a getValue() method, they are of different types, so mapping doesn't work
Collections.min(Arrays.asList(obj1, obj2)
.filter(obj -> obj != null)
.map(obj -> obj.getValue()) // this line will fail since the methods correspond to different objects
.collect(Collectors.toList()));
ich so das Gefühl, ein ziemlich einfaches Problem sein sollte, aber mein das Gehirn lässt es nicht funktionieren. Es gibt eine Min-Funktion, in der Sie eine Situation bipassieren können, in der das Objekt null sein kann.
Was der Typ (en) von 'value'? –
Sie sind vom Typ Long – user2869231
Warum nicht einfach die NullPointerException abfangen? –