以下代码为属性Salary抛出NPE为null。
class Person有属性:string:name,Integer:age,Integer:salary
salary
在这里可以为null。我想创建一份工资清单。
persons.stream().mapToDouble(Person::getSalary).boxed().collect(Collectors.toList())
在这里,我必须在结果列表中保留空值。 null不能替换为0。
答案 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()
。 (留给读者练习。)