Eine Ausnahme auslösen, wenn ein optionales & lt; & gt; ist anwesend
Sagen wir, ich will, um zu sehen, wenn ein Objekt in einen stream, und wenn es nicht vorhanden ist, eine Exception zu werfen. Eine Möglichkeit, die ich tun könnte, wäre mit der orElseThrow
Methode:
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 mit der Rückseite? Wenn möchte ich eine exception werfen, wenn eine übereinstimmung gefunden wird:
String two = values.stream()
.filter(s -> s.equals("two"))
.findAny()
.ifPresentThrow(() -> new RuntimeException("not found"));
Konnte ich nur store die Optional
und tun das isPresent
- check 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, dies zu erreichen ifPresentThrow
Art von Verhalten? Versucht zu tun, werfen auf diese Weise eine schlechte Praxis?
InformationsquelleAutor der Frage mkobit | 2015-02-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da Sie nur darauf wenn eine übereinstimmung gefunden wurde, nicht das, was tatsächlich gefunden wird, können Sie
anyMatch
für diese, und Sie brauchen nicht zu verwendenOptional
an alle:InformationsquelleAutor der Antwort Stuart Marks
Könnten Sie die
ifPresent()
Aufruf eine exception werfen, wenn Ihr filter findet nichts:InformationsquelleAutor der Antwort beresfordt