2016-04-07 17 views
0

Aşağıdaki akış boru hattı hiçbir şey bulunmazsa çalışmaz, bu durumda .findFirst() bir NPE atar.java 8 akışı - hiçbir şey bulunamadığında ele alın

Bunu nasıl önleyebilirim?

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

? Varsayılan değer var mı? Bir istisna atmak mı? – Tunaki

cevap

1

Sen findFirst tarafından döndürülen İsteğe eğer boş bazı varsayılan değer dönecekti ki, orElse(someDefault) ile get() değiştirebilirsiniz. Veya findFirst hiçbir şey bulamadığında belirli bir özel durum atmak isterseniz, orElseThrow(execptionSupplier)'u kullanabilirsiniz.

0

o zaman aşağıdaki sıraya göre findAny() ve OrElse() kullanmalıdır lambda ifadesi kullanarak geri dönmek için bir şey yoksa varsayılan değer dönmek istiyorsanız hiçbir şey bulunursa eğer yapmak istiyorsunuz ne

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