В дополнение к тому, что @ khelwood упомянуто относительно модуля с отрицательными числами.
Важно знать, что промежуточная операция filter
не удаляет элементы и не выполняет никаких потоковых операций; вместо этого filter
возвращает новый поток, в котором все элементы, удовлетворяющие предоставленному предикату, т.е. i -> i % 2 == 1
присутствуют.
i -> i % 2 == 1
говорит "сохраняйте элемент, представленный как i
, только если это нечетное число ".
если вы хотите даже тогда, вы должны сделать i -> i % 2 == 0
, читается как «оставьте только элемент, представленный как i
, если это четное число ».
С другой стороны, если вы работаете на JDK9, вы можете использовать ifPresentOrElse
для простой проверки isPresent()
.
numbers.stream()
.filter(i -> i % 2 == 0)
.mapToDouble(i -> i)
.average()
.ifPresentOrElse(System.out::println,
() -> System.out.println("Error"));