stream流当中为什么e-> e.getGroState() != 1会报错,而e-> e.getGroState() == null不会报错 集合当中存在null
时间: 2024-01-12 13:03:17 浏览: 48
在 Java 8 Stream 中,调用对象的方法时,如果该对象是 null,就会抛出 NullPointerException 异常。因此,当集合中存在 null 元素时,调用 `e.getGroState()` 方法就会出现空指针异常,导致程序报错。
根据你提供的代码,第一个会报错的原因就是因为 `projectAndTeam` 列表中存在为 null 的元素,导致调用 `e.getGroState()` 方法时抛出了空指针异常。而第二个不会报错的原因是因为它过滤的是 `getGroState()` 为 null 的元素,而不是调用 `getGroState()` 方法,所以不会出现空指针异常。
为了避免空指针异常,可以在调用 `e.getGroState()` 方法之前先判断 `e` 是否为 null,例如:
```
List<GetProjectAndTeamOutBO> collectTrue = projectAndTeam.stream()
.filter(e -> e != null && e.getGroState() != 1)
.collect(Collectors.toList());
```
这样就可以避免空指针异常了。
相关问题
stream流当中为什么e-> e.getGroState() == 1会报错,而e-> e.getGroState() == null不会报错
在 Java 8 Stream 中,调用对象的方法时,如果该对象是 null,就会抛出 NullPointerException 异常。因此,当集合中存在 null 元素时,调用 `e.getGroState()` 方法就会出现空指针异常,导致程序报错。
根据你提供的代码,`e -> e.getGroState() == 1` 会报错的原因是因为 `projectAndTeam` 列表中存在为 null 的元素,导致调用 `e.getGroState()` 方法时抛出了空指针异常。而 `e -> e.getGroState() == null` 不会报错的原因是因为它不是调用 `getGroState()` 方法,它只是判断 `getGroState()` 是否为 null,即使 `e` 为 null,也不会出现空指针异常。
为了避免空指针异常,可以在调用 `e.getGroState()` 方法之前先判断 `e` 是否为 null,例如:
```
List<GetProjectAndTeamOutBO> collectTrue = projectAndTeam.stream()
.filter(e -> e != null && e.getGroState() == 1)
.collect(Collectors.toList());
```
这样就可以避免空指针异常了。
List<GetProjectAndTeamOutBO> collectTrue = projectAndTeam.stream().filter(e-> e.getGroState() != 1).collect(Collectors.toList()); List<GetProjectAndTeamOutBO> collectTruer = projectAndTeam.stream().filter(e-> e.getGroState() == null).collect(Collectors.toList());为什么第一个会报错
根据代码,第一个会报错是因为 `projectAndTeam` 中的元素可能存在空引用,导致调用 `getGroState()` 方法时出现 NullPointerException 异常。可以在过滤之前加上 `Objects.nonNull()` 方法判断元素是否为空,如下所示:
```
List<GetProjectAndTeamOutBO> collectTrue = projectAndTeam.stream().filter(e -> Objects.nonNull(e) && e.getGroState() != 1).collect(Collectors.toList());
```
这样可以避免空引用异常。另外,第二个不会报错是因为它过滤的是 `getGroState()` 为 null 的元素,而不是调用 `getGroState()` 方法。
阅读全文