Map<String, List<T>> 到 List<T> 的转换
时间: 2023-10-14 14:07:49 浏览: 41
可以使用流操作来实现 `Map<String, List<T>>` 到 `List<T>` 的转换。具体实现可以参考以下代码:
```java
Map<String, List<T>> map = ...; // 假设已经有一个 Map<String, List<T>> 对象
List<T> list = map.values().stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
```
上述代码中,首先通过 `map.values()` 方法获取 `Map` 中所有的 `List<T>` 值集合,然后使用 `flatMap` 方法将多个 `List<T>` 合并成一个 `Stream<T>` 流,最后使用 `Collectors.toList()` 方法将所有元素收集到一个 `List<T>` 集合中。
需要注意的是,上述代码只能保证 `List<T>` 中元素的顺序,不能保证不重复。如果需要去重,可以在 `Collectors.toList()` 方法前加上 `distinct()` 方法。
相关问题
Map<String,List<T>>转成List<T>
可以使用 Java 8 中的流(Stream)来实现将 Map<String, List<T>> 转成 List<T> 的操作。以下是示例代码:
```java
Map<String, List<T>> map = ... // 假设已经有一个 Map<String, List<T>> 对象
List<T> list = map.values().stream() // 获取 Map 中的所有 value(即 List<T>)
.flatMap(Collection::stream) // 将所有 List<T> 中的元素合并成一个 Stream<T>
.collect(Collectors.toList()); // 将 Stream<T> 转成 List<T>
```
解释一下上面的代码:
1. 首先通过 `map.values()` 获取 Map 中的所有 value,得到一个 `Collection<List<T>>` 对象;
2. 然后调用 `stream()` 方法将其转成一个流;
3. 接着调用 `flatMap(Collection::stream)` 方法将所有 List<T> 中的元素合并成一个 Stream<T>;
4. 最后调用 `collect(Collectors.toList())` 方法将 Stream<T> 转成 List<T>。
这样就可以将 Map<String, List<T>> 转成 List<T> 了。
遍历map<string,List<Info>>
遍历Map<String, List<Info>>的方式有以下几种:
1. 普通循环遍历:
```java
Map<String, List<Info>> map = new HashMap<>();
// 假设map已经被填充了数据
for (Map.Entry<String, List<Info>> entry : map.entrySet()) {
String key = entry.getKey();
List<Info> value = entry.getValue();
// 在这里对key和value进行操作
}
```
2. 迭代器遍历:
```java
Map<String, List<Info>> map = new HashMap<>();
// 假设map已经被填充了数据
Iterator<Map.Entry<String, List<Info>>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, List<Info>> entry = iterator.next();
String key = entry.getKey();
List<Info> value = entry.getValue();
// 在这里对key和value进行操作
}
```
3. Lambda表达式遍历(Java 8及以上):
```java
Map<String, List<Info>> map = new HashMap<>();
// 假设map已经被填充了数据
map.forEach((key, value) -> {
// 在这里对key和value进行操作
});
```