为什么e -> e.getGroState() == null 不是调用getGroState()方法,而e -> e.getGroState() == 1是调用了e.getGroState() 方法
时间: 2024-01-04 15:01:55 浏览: 58
对于 `e -> e.getGroState() == null` 和 `e -> e.getGroState() == 1`,它们都调用了 `getGroState()` 方法。但是它们的执行结果不同,具体解释如下:
- `e -> e.getGroState() == null`:这个 Lambda 表达式的含义是过滤出 `getGroState()` 方法返回值为 null 的元素。它只是判断 `getGroState()` 方法返回值是否为 null,不会出现空指针异常。如果 `e` 为 null,它也不会报错,因为它没有调用 `getGroState()` 方法。
- `e -> e.getGroState() == 1`:这个 Lambda 表达式的含义是过滤出 `getGroState()` 方法返回值等于 1 的元素。它会调用 `getGroState()` 方法,如果 `e` 为 null,就会出现空指针异常。
因此,在使用 Lambda 表达式时,应该注意对象是否为 null,避免出现空指针异常。
相关问题
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());
```
这样就可以避免空指针异常了。
stream流当中为什么e-> e.getGroState() != 1会报错,而e-> e.getGroState() == null不会报错 集合当中存在null
在 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());
```
这样就可以避免空指针异常了。