小编Ank*_*ngh的帖子

Java流上的NPE减少操作

最近,在使用Java 8流时,我在NullPointerException使用以下测试用例时遇到了一个reduce操作:

private static final BinaryOperator<Integer> sum = (a, b) -> {
    if (a == null) return b;
    if (b == null) return a;
    return Integer.sum(a, b);
};

List<Integer> s = new ArrayList<>();
s.add(null);
s.add(null);
s.add(null);

Integer i = s.stream().reduce(sum).orElse(null);
// throws NPE

Integer i = s.stream().reduce(sum).orElse(2);
// throws NPE

Integer i = s.stream().reduce(null,(a, b)->null);
// returns a value i.e null
Run Code Online (Sandbox Code Playgroud)

或者:

Integer i = s.stream().filter(Objects::nonNull).reduce(Integer::sum).orElse(null);
// returns a value i.e null
Run Code Online (Sandbox Code Playgroud)

检查reduce操作后,我遇到了执行reduce操作的类:

class ReducingSink implements AccumulatingSink<T, Optional<T>, …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

7
推荐指数
2
解决办法
3716
查看次数

标签 统计

java ×1

java-8 ×1

java-stream ×1