List<String> 使用stream转map 其中String 为key ,value 为new List
时间: 2024-04-26 10:27:11 浏览: 11
可以使用Java 8中的Stream API将List<String>转换为Map<String, List<String>>。代码如下:
```
List<String> list = Arrays.asList("a", "b", "c", "a");
Map<String, List<String>> map = list.stream()
.collect(Collectors.groupingBy(s -> s, Collectors.mapping(s -> "new List", Collectors.toList())));
```
上述代码中,首先将List<String>转换为Stream<String>,然后使用groupingBy对元素进行分组,其中第一个参数为分组的依据,即String类型的值;第二个参数为分组后的值的处理方式,即将String类型的值转换为"new List"字符串,然后将其收集到一个新的List中。最后,将分组后的结果收集到一个Map<String, List<String>>中。
相关问题
用stream將list<Map<String,List<String>>> 转化为Map<String,List<String>>
可以使用flatMap方法将所有的Map合并成一个,然后使用Collectors.groupingBy方法按照key进行分组,最终得到一个Map<String,List<String>>。
代码示例:
```
List<Map<String,List<String>>> list = new ArrayList<>();
// 添加数据到list中
Map<String,List<String>> result = list.stream()
.flatMap(map -> map.entrySet().stream())
.collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.mapping(Map.Entry::getValue,
Collectors.reducing(new ArrayList<>(),
(a, b) -> {
a.addAll(b);
return a;
}))));
```
解释:
1. 首先使用flatMap方法将所有的Map合并成一个,flatMap方法会将所有的元素合并成一个流。
2. 然后使用Collectors.groupingBy方法按照key进行分组,这里的key就是Map中的String类型。
3. Collectors.mapping方法用于将Map.Entry对象转换为Map中的List<String>对象,这里的value就是List<String>类型。
4. Collectors.reducing方法用于将所有的List<String>对象合并成一个List<String>,这里使用addAll方法将两个List<String>合并成一个。
5. 最终得到的结果就是一个Map<String,List<String>>类型的对象。
將List<Map<String,String>>用stream转为Map<String,List<String>>
可以使用Java 8的Stream API来将List<Map<String,String>>转化为Map<String,List<String>>。假设我们要将List<Map<String,String>>中的key为"keyName"的元素对应的value值转化为List<String>,并将每个元素的key对应的List<String>收集到Map<String,List<String>>中,可以使用以下代码:
```
List<Map<String, String>> list = ... // 初始化List<Map>对象
Map<String, List<String>> result = list.stream()
.flatMap(map -> map.entrySet().stream())
.filter(entry -> entry.getKey().equals("keyName"))
.collect(Collectors.groupingBy(Map.Entry::getKey, Collectors.mapping(Map.Entry::getValue, Collectors.toList())));
```
这段代码会对List中的每个Map对象执行flatMap操作,将其中的entry打散为一个个单独的entry,然后筛选出key为"keyName"的entry,最后使用groupingBy和mapping方法将每个entry的key对应的value转化为List<String>,并收集到Map<String,List<String>>中。