Collectors.mapping(o -> map.get(o.getNum()), Collectors.toList())怎么让是null的不放List中
时间: 2024-03-20 19:38:56 浏览: 90
如果不希望 `null` 值放入 `List` 中,可以在 `mapping` 中使用 `Optional` 类型,并在 `filter` 方法中排除 `Optional` 为空的情况,例如:
```
Collectors.mapping(o -> Optional.ofNullable(map.get(o.getNum())).filter(Objects::nonNull).orElse(null), Collectors.toList())
```
这样,如果 `map.get(o.getNum())` 返回 `null`,则 `Optional` 为空,会被过滤掉,不会将 `null` 值放入 `List` 中。
相关问题
Collectors.mapping(e -> deviceMap.get(e.getDeviceId()), Collectors.toList()) 出现了All elements are null
这个问题可能是因为 `deviceMap` 中不存在 `deviceRelatedList` 中某些元素的设备 ID,导致了 `deviceMap.get(e.getDeviceId())` 返回了 null,从而导致了 `mapping` 操作中的所有元素都是 null。
你可以在调用 `mapping` 之前先过滤掉 `deviceRelatedList` 中在 `deviceMap` 中不存在的设备 ID 对应的元素,或者在 `mapping` 操作中加入 null 值判断,避免出现空指针异常。
Map<Long, List<List<RealtimeDataAO>>> collect = siteDeviceRelatedList.stream().collect(Collectors.groupingBy(SiteDeviceRelatedDO::getSiteId, Collectors.mapping(o -> deviceRealtimeMap.get(o.getDeviceId()), Collectors.toList())));怎么返回值变成Map<Long, List<RealtimeDataAO>>形式
要将 `Map<Long, List<List<RealtimeDataAO>>>` 转换为 `Map<Long, List<RealtimeDataAO>>` 的形式,可以使用 `flatMap` 和 `collect` 方法来实现。 代码示例如下:
```java
Map<Long, List<RealtimeDataAO>> collect = siteDeviceRelatedList.stream()
.collect(Collectors.groupingBy(SiteDeviceRelatedDO::getSiteId,
Collectors.mapping(o -> deviceRealtimeMap.get(o.getDeviceId()), Collectors.toList())))
.entrySet().stream()
.flatMap(e -> e.getValue().stream().flatMap(List::stream)
.map(item -> new AbstractMap.SimpleEntry<>(e.getKey(), item)))
.collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.mapping(Map.Entry::getValue, Collectors.toList())));
```
代码中使用 `entrySet` 方法将 `Map<Long, List<List<RealtimeDataAO>>>` 转换为 `Stream<Map.Entry<Long, List<List<RealtimeDataAO>>>>`,然后使用 `flatMap` 方法将 `List<List<RealtimeDataAO>>` 打平为 `List<RealtimeDataAO>`。接着使用 `map` 方法将 `List<RealtimeDataAO>` 中的元素与对应的 `siteId` 组成一个新的 `Map.Entry` 对象。最后再使用 `groupingBy` 和 `mapping` 方法将 `Map.Entry<Long, RealtimeDataAO>` 转换为 `Map<Long, List<RealtimeDataAO>>` 的形式。
阅读全文