Java 8流:处理空值

Him*_*dav 4 java java-8 java-stream

以下代码为属性Salary抛出NPE为null.class Person有属性:string:name,Integer:age,Integer:salary salary在这里可以为null.我想创建一份工资清单.

persons.stream().mapToDouble(Person::getSalary).boxed().collect(Collectors.toList())
在这里,我必须在结果列表中保留空值.null不能替换为0.

Fed*_*ner 8

我认为你可以使用map而不是mapToDouble与三元运算符一起使用:

List<Double> salaries = persons.stream()
    .map(Person::getSalary)
    .map(s -> s == null ? null : s.doubleValue())
    .collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)

  • @HadiJ两次调用`getProperty()`看起来不像是对我的改进.此外,你永远不应该使用`new Double(...)`,使用自动装箱或'Double.valueOf`.从Java 9开始,构造函数已被标记为已弃用,以提醒您.如果你想要一个`map`步骤,你可以使用`.map(p - > Optional.ofNullable(p.getSalary()).map(Integer :: doubleValue).orElse(null))`但是我更喜欢这个答案的代码. (2认同)