小编use*_*243的帖子

Java 8 Streams - 收集可能为null的值

我有以下代码:

    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));
    }
Run Code Online (Sandbox Code Playgroud)

现在,pairValue可以为null.为了避免这里描述的NPE ,在"收集"时,我希望确保只发送那些非空的值.如果为null,我想发送"".

所以,我尝试用这个替换最后一行:

.collect(Collectors.toMap(Pair::getKey,Optional.ofNullable(Pair::getValue).orElse(""));
Run Code Online (Sandbox Code Playgroud)

以及其他修改:

.collect(Collectors.toMap(pair -> pair.getKey(), Optional.ofNullable(pair -> pair.getValue()).orElse(""));
Run Code Online (Sandbox Code Playgroud)

不编译.我不确定这里需要什么.有帮助吗?

java hashmap java-8 keyvaluepair java-stream

6
推荐指数
2
解决办法
1671
查看次数

这段代码有什么严重错误?它在语义上对我来说是正确的

在博客中看到这种代码驱使作者疯狂..为什么?

public boolean foo() {
    boolean b = bar();
    if (b == true) {
        return true;
    }
    else {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

java optimization

2
推荐指数
3
解决办法
116
查看次数

标签 统计

java ×2

hashmap ×1

java-8 ×1

java-stream ×1

keyvaluepair ×1

optimization ×1