Witajcie, drodzy programiści Java,
Wiem, że temat może być trochę, in advance
ponieważ JDK8 nie jest jeszcze wydany (a przynajmniej na razie nie…), ale czytałem kilka artykułów na temat wyrażeń Lambda, a zwłaszcza części związanej z nowym API kolekcji znanym jako Stream.
Oto przykład podany w artykule Java Magazine (jest to algorytm populacji wydry ..):
Set<Otter> otters = getOtters();
System.out.println(otters.stream()
.filter(o -> !o.isWild())
.map(o -> o.getKeeper())
.filter(k -> k.isFemale())
.into(new ArrayList<>())
.size());
Moje pytanie brzmi: co się stanie, jeśli w środku wewnętrznej iteracji Seta jedna z wydr jest zerowa?
Spodziewałbym się, że zostanie wyrzucony wyjątek NullPointerException, ale może nadal tkwię w poprzednim paradygmacie programowania (niefunkcjonalnym), czy ktoś może mnie oświecić, jak należy sobie z tym poradzić?
Jeśli to naprawdę wyrzuci wyjątek NullPointerException, uważam tę funkcję za dość niebezpieczną i będzie musiała być używana tylko jak poniżej:
- Deweloper, aby upewnić się, że nie ma wartości null (może przy użyciu poprzedniego .filter (o -> o! = Null))
- Deweloper, aby upewnić się, że aplikacja nigdy nie generuje pustej wydry ani specjalnego obiektu NullOtter do obsługi.
Jaka jest najlepsza opcja, czy jakakolwiek inna opcja?
Dzięki!