Map<String, List<T>>转成 List<String, List<T>>
时间: 2023-07-09 14:40:16 浏览: 48
可以使用Java 8的Stream API来完成这个转换。
假设原始的Map为Map<String, List<T>>,可以使用以下代码将其转换为List<String, List<T>>:
```java
List<String> keys = new ArrayList<>(map.keySet());
List<List<T>> values = new ArrayList<>(map.values());
List<String, List<T>> result = IntStream.range(0, keys.size())
.mapToObj(i -> new AbstractMap.SimpleEntry<>(keys.get(i), values.get(i)))
.collect(Collectors.toList());
```
首先获取所有的键和值,并分别存储在List中。然后使用IntStream.range方法生成一个IntStream,它的元素为0到keys.size()-1。对于IntStream中的每个元素i,使用AbstractMap.SimpleEntry将第i个键和值组成一个键值对,并将它们收集到List中,最终得到List<String, List<T>>类型的结果。
需要注意的是,这种转换方式可能会丢失原始Map中的顺序,因为List没有保证元素的顺序。如果需要保留顺序,可以考虑使用LinkedHashMap和LinkedList来替代HashMap和ArrayList。
相关问题
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<String>> 转成 List<String>
要将Map<String, List<String>>转换为List<String>,可以使用以下步骤:
1. 首先,声明一个空的List<String>来存储结果。
2. 然后,使用Map的values()方法来获取Map中的所有值,返回一个Collection<List<String>>。
3. 接着,使用forEach循环遍历Collection<List<String>>中的每一个List<String>。
4. 在循环内部,使用addAll方法将每一个List<String>中的元素添加到之前声明的空List<String>中。
5. 最后,返回这个包含所有元素的List<String>。
这样就成功将Map<String, List<String>>转换为List<String>了。<span class="em">1</span><span class="em">2</span><span class="em">3</span>