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());为什么第一个会报错
时间: 2024-03-06 20:52:16 浏览: 16
根据代码,第一个会报错是因为 `projectAndTeam` 中的元素可能存在空引用,导致调用 `getGroState()` 方法时出现 NullPointerException 异常。可以在过滤之前加上 `Objects.nonNull()` 方法判断元素是否为空,如下所示:
```
List<GetProjectAndTeamOutBO> collectTrue = projectAndTeam.stream().filter(e -> Objects.nonNull(e) && e.getGroState() != 1).collect(Collectors.toList());
```
这样可以避免空引用异常。另外,第二个不会报错是因为它过滤的是 `getGroState()` 为 null 的元素,而不是调用 `getGroState()` 方法。
相关问题
List<GetProjectAndTeamOutBO> collectTrue = projectAndTeam.stream().filter(e->e.getGroState() == 1).collect(Collectors.toList()); 修改当grostate等于2时也过滤
可以在filter中加入条件,过滤出grostate等于1或2的元素,代码如下:
```
List<GetProjectAndTeamOutBO> collectTrue = projectAndTeam.stream()
.filter(e -> e.getGroState() == 1 || e.getGroState() == 2)
.collect(Collectors.toList());
```
这样就可以得到grostate等于1或2的元素集合了。
优化代码 List<ActionExecutingParam> validActionList = actionExecutingParam.stream().filter(o -> check(o.getProgressStatus(), o.getAppMap())).collect(Collectors.toList()); List<ActionExecutingParam> unvalidActionList = actionExecutingParam.stream().filter(o -> !check(o.getProgressStatus(), o.getAppMap())).collect(Collectors.toList());
你的代码实现了将一个 List<ActionExecutingParam> 按照条件筛选成两个 List<ActionExecutingParam> 的功能,其中一个 List 存放符合条件的元素,另一个 List 存放不符合条件的元素。
不过代码中有一些可以优化的地方:
1. 可以将 `check(o.getProgressStatus(), o.getAppMap())` 的结果缓存起来,避免重复计算。
2. 可以使用 `partitioningBy` 方法来将 List 分成两个 Map,其中一个 Map 中存放符合条件的元素,另一个 Map 中存放不符合条件的元素。
下面是优化后的代码实现:
```
Map<Boolean, List<ActionExecutingParam>> partitionedMap = actionExecutingParam.stream()
.collect(Collectors.partitioningBy(o -> check(o.getProgressStatus(), o.getAppMap())));
List<ActionExecutingParam> validActionList = partitionedMap.get(true);
List<ActionExecutingParam> unvalidActionList = partitionedMap.get(false);
```
这样可以避免重复计算,并且更加简洁和易于理解。