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