Добрый день, друзья Java-разработчики!
Я знаю, что эта тема может быть немного, так in advance
как JDK8 еще не выпущен (и пока не во всяком случае ..), но я читал несколько статей о лямбда-выражениях и, в частности, части, связанной с новым API коллекции, известным как Stream.
Вот пример, приведенный в статье Java Magazine (это алгоритм популяции выдр ..):
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());
У меня вопрос: что произойдет, если в середине внутренней итерации Set одна из выдр будет равна нулю?
Я ожидал, что будет выброшено исключение NullPointerException, но, возможно, я все еще застрял в предыдущей парадигме разработки (нефункциональной), может ли кто-нибудь просветить меня, как с этим обращаться?
Если это действительно вызовет исключение NullPointerException, я считаю эту функцию довольно опасной и ее придется использовать только, как показано ниже:
- Разработчик, чтобы убедиться, что нет нулевого значения (возможно, используя предыдущий .filter (o -> o! = Null))
- Разработчик должен убедиться, что приложение никогда не генерирует null otter или специальный объект NullOtter, с которым нужно иметь дело.
Какой вариант лучше, или любой другой вариант?
Благодарность!