Java 8流:处理空值

时间:2018-04-05 18:57:13

标签: 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。

2 个答案:

答案 0 :(得分:7)

我认为您可以使用map代替mapToDouble以及三元运算符:

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

答案 1 :(得分:2)

如果我理解正确,您希望将每个属性值转换为Double(如果它不是null),或者如果它是null则将其保留为null。所以就这么说:

Integer prop = value.getProperty();
return (prop != null) ? prop.doubleValue() : null;

您可以将其表示为lambda,并将其传递给map()。 (留给读者练习。)