Why does this throw a java.lang.NullPointerException
?
List strings = new ArrayList<>();
strings.add(null);
s
The following code replaces findFirst()
with limit(1)
and replaces orElse()
with reduce()
:
String firstString = strings.
stream().
limit(1).
reduce("StringWhenListIsEmpty", (first, second) -> second);
limit()
allows only 1 element to reach reduce
. The BinaryOperator
passed to reduce
returns that 1 element or else "StringWhenListIsEmpty"
if no elements reach the reduce
.
The beauty of this solution is that Optional
isn't allocated and the BinaryOperator
lambda isn't going to allocate anything.