【发布时间】:2015-12-04 16:04:43
【问题描述】:
为什么会抛出java.lang.NullPointerException?
List<String> strings = new ArrayList<>();
strings.add(null);
strings.add("test");
String firstString = strings.stream()
.findFirst() // Exception thrown here
.orElse("StringWhenListIsEmpty");
//.orElse(null); // Changing the `orElse()` to avoid ambiguity
strings 中的第一项是null,这是一个完全可以接受的值。此外,findFirst() 返回一个Optional,这让findFirst() 能够处理nulls 更有意义。
编辑:更新了 orElse() 以减少歧义。
【问题讨论】:
-
null 不是完全可以接受的值...改用 ""
-
@MicheleLacorte 虽然我在这里使用
String,但如果它是一个代表数据库中列的列表怎么办?该列第一行的值可以是null。 -
是的,但在 java 中 null 是不可接受的。使用查询将 null 设置为 db
-
@MicheleLacorte,
null在 Java 中是一个完全可以接受的值,一般来说。特别是,它是ArrayList<String>的有效元素。然而,与任何其他值一样,可以用它做什么也是有限制的。 “永远不要使用null”不是有用的建议,因为你无法避免它。 -
@NathanHughes - 我怀疑当你打电话给
findFirst()时,你已经没有什么想做的了。
标签: java java-8 java-stream optional