Ich bin auf der Suche nach einer bequemeren Möglichkeit der Gleichheitsprüfung für einen optionalen Wert.Bequeme Art der Überprüfung der Gleichheit für Optionals
Dies ist, was ein Oracle Blog post schlägt vor:
Optional<USB> maybeUSB = ...; maybeUSB.filter(usb -> "3.0".equals(usb.getVersion())
.ifPresent(() -> System.out.println("ok"));
IMHO Ergebnisse in so etwas wie
if (maybeUSB.filter(c -> "3.0".equals(c.getVersion())).isPresent()) {
...
}
Natürlich, die Art eines schlechten Beispiel ist, weil es die Version und nicht die Instanz von USB vergleicht sich aber ich denke, es sollte noch meinen Standpunkt beweisen.
Ist das wirklich so gut wie es geht?
Kein
boolean presentAndEquals(Object)
oder
boolean deepEquals(Object)
Bin ich hier etwas fehlt?
EDIT:
ich mit Optionals.equals entweder nicht so glücklich bin. Muss ich wirklich ein Objekt zuerst boxen, um sofort zu entpacken und auf Gleichheit zu prüfen? direkt
Nicht vorzeitig optimieren. Sie müssen entweder box (für die Sie die Kosten nicht kennen), oder testen Sie für 'isPresent()' (die Sie auch nicht die Kosten kennen). 'mayfoo.equals (Optional.of (...))' ist lesbar, also benutze es. – slim
stimme ich über vorzeitige Optimierung, aber es ist mehr über Code Golf als Timing .. über Java sprechen richtig;) –
"Ich bin nicht glücklich" Es gibt nichts besonderes über 'Optional': Es ist nur ein Container für eine Referenz. Würdest du erwarten, dass eine andere Klasse, die zufällig einen 'String' enthält, für 'new Frobnitz' ('some string') den Wert 'wahr' zurückgibt. Die Fälle, in denen die Kürze nützlich ist, werden durch die Fälle aufgewogen, in denen es einfach falsch ist. –