Angenommen, ich möchte sehen, ob ein Objekt in einem Stream vorhanden ist und, wenn es nicht vorhanden ist, eine Ausnahme auslösen. Eine Möglichkeit, die ich tun könnte, würde mit der orElseThrow
Methode:Eine Ausnahme auslösen, wenn ein Optional <> vorhanden ist
List<String> values = new ArrayList<>();
values.add("one");
//values.add("two"); // exception thrown
values.add("three");
String two = values.stream()
.filter(s -> s.equals("two"))
.findAny()
.orElseThrow(() -> new RuntimeException("not found"));
Was ist in der Rückseite? Wenn ich will, um eine Ausnahme auszulösen, wenn eine Übereinstimmung gefunden wird:
String two = values.stream()
.filter(s -> s.equals("two"))
.findAny()
.ifPresentThrow(() -> new RuntimeException("not found"));
Ich konnte nur die Optional
speichern und tun die isPresent
Prüfung nach:
Optional<String> two = values.stream()
.filter(s -> s.equals("two"))
.findAny();
if (two.isPresent()) {
throw new RuntimeException("not found");
}
Gibt es eine Möglichkeit, diese ifPresentThrow
Art zu erreichen von Verhalten? Versucht man auf diese Weise eine schlechte Übung zu werfen?
der Punkt 'orElseThrow' ist, den Wert zu einem nicht optional konvertieren mit Fehlerbehandlung, wenn der Wert nicht vorhanden ist. Da Sie nur daran interessiert sind, ob der Wert existiert, warum sollten Sie nicht die für diesen Zweck entwickelte Methode verwenden: 'isPresent'? –