2016-04-07 7 views
0

Die folgende Stream-Pipeline funktioniert nicht, wenn nichts gefunden wird. In diesem Fall wird .findFirst() eine NPE ausgelöst.Java 8 Stream - Handle, wenn nichts gefunden wird

Wie kann ich das verhindern?

scheduleDurationContainers.stream() 
     .filter(s -> s.getContainerType() == ScheduleIntervalContainerTypeEnum.BONUS).findFirst().get() 
+1

verwenden Was Sie tun wollen, wenn nichts gefunden wird ? Haben Sie einen Standardwert? Eine Ausnahme auslösen? – Tunaki

Antwort

1

Sie können get() mit orElse(someDefault), ersetzen, die einige Standardwert, wenn der von findFirst ist leer zurückgegeben Optional zurückkehren würde. Oder Sie können orElseThrow(execptionSupplier) verwenden, wenn Sie eine bestimmte Ausnahme auslösen möchten, wenn findFirst nichts findet.

0

Wenn Sie Standardwert zurück, wenn es nichts Lambda-Ausdruck zurückzukehren verwenden, dann sollten Sie findAny() und OrElse() in folgender Reihenfolge

Person result1 = persons.stream()       // Convert to stream 
       .filter(x -> "answer".equals(x.getName())) // we want to filter "answer" only 
       .findAny()        // If 'findAny' then return found 
       .orElse(null);       // If not found, return null