Map<String,List<T>>根据key生成新的List
时间: 2023-10-14 19:28:02 浏览: 36
要根据 Map 中的 key 生成新的 List,可以使用 Java 8 中的流(Stream)和 Collectors 工具类来实现。以下是示例代码:
```java
Map<String, List<T>> map = ... // 假设已经有一个 Map<String, List<T>> 对象
List<String> keys = ... // 假设已经有一个包含所有 key 的 List<String> 对象
List<T> newList = keys.stream() // 将 keys 转成一个流
.flatMap(key -> map.getOrDefault(key, Collections.emptyList()).stream()) // 获取每个 key 对应的 List<T>,如果没有则返回空集合
.collect(Collectors.toList()); // 将所有 List<T> 中的元素合并成一个 List<T>
```
解释一下上面的代码:
1. 首先通过 `keys.stream()` 将 keys 转成一个流;
2. 然后调用 `flatMap(key -> map.getOrDefault(key, Collections.emptyList()).stream())` 方法获取每个 key 对应的 List<T>,如果没有则返回空集合。这里使用了 `getOrDefault()` 方法,可以避免在 Map 中找不到 key 时出现 NullPointerException;
3. 接着调用 `collect(Collectors.toList())` 方法将所有 List<T> 中的元素合并成一个 List<T>。
这样就可以根据 Map 中的 key 生成新的 List 了。