【发布时间】:2018-07-25 18:27:10
【问题描述】:
我有以下代码:
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 可以为空。为了避免如here 所述的 NPE,在“收集”时,我希望确保只发送那些非空值。如果为空,我想发送“”。
所以,我尝试将最后一行替换为:
.collect(Collectors.toMap(Pair::getKey,Optional.ofNullable(Pair::getValue).orElse(""));
及其其他修改:
.collect(Collectors.toMap(pair -> pair.getKey(), Optional.ofNullable(pair -> pair.getValue()).orElse(""));
不编译。我不确定这里需要什么。有什么帮助吗?
【问题讨论】:
-
你能详细说明什么不起作用吗?电脑会起火吗?
-
Java 8 NullPointerException in Collectors.toMap stackoverflow.com/questions/24630963/… 这是同样的问题吗?
-
它没有编译,编辑了问题。
-
不幸的是,我目前无能为力。我投票决定重新提出问题并将其标记为需要主持人干预,所以我们会看看会发生什么。
-
@user2116243 好像被删除了!
标签: java java-8 hashmap java-stream key-value