Java 8 streams – collect potentially null values
•
Java
I have the following code:
private static <T> Map<String,?> getDifference(final T a,final T b,final Map<String,Function<T,Object>> fields) {
return fields.entrySet().stream()
.map(e -> {
final String name = e.getKey();
final Function<T,Object> getter = e.getValue();
final Object pairKey = getter.apply(a);
final Object pairValue = getter.apply(b);
if (Objects.equals(pairKey,pairValue)) {
return null;
} else {
return Pair.of(name,pairValue);
}
})
.filter(Objects::nonNull)
.collect(Collectors.toMap(Pair::getKey,Pair::getValue));
}
Pairvalue can now be null In order to avoid NPE as described here, I want to ensure that only those non empty values are sent during "collection" If NULL, I want to send ""
So I try to replace the last line with this:
.collect(Collectors.toMap(Pair::getKey,Optional.ofNullable(Pair::getValue).orElse(""));
And other modifications:
.collect(Collectors.toMap(pair -> pair.getKey(),Optional.ofNullable(pair -> pair.getValue()).orElse(""));
Do not compile I'm not sure what I need here Does it help?
Solution
Your grammar is incorrect The second parameter of tomap () must be lambda, so
.collect(Collectors.toMap(
pair -> pair.getKey(),pair -> Optional.ofNullable(pair.getValue()).orElse("")
));
or
You can modify the map () section as follows
return Pair.of(name,Optional.ofNullable(pairValue).orElse(""));
And use your original collection ()
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码
