如何将字符串拆分为映射,并使用流通过重复键将值分组? [英] How to split a string into a map, grouping values by duplicate keys using streams?
本文介绍了如何将字符串拆分为映射,并使用流通过重复键将值分组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我要转换以下内容
String flString="view1:filedname11,view1:filedname12,view2:fieldname21";
到Map<String,Set<String>>
以获得键/值,如下所示:
to a Map<String,Set<String>>
to get the key/value as below:
view1=[filedname11,filedname12]
view2=[fieldname21]
我想使用Java 8流.我尝试过
I want to use Java 8 streams. I tried
Arrays.stream(tokens)
.map(a -> a.split(":"))
.collect(Collectors.groupingBy(
a -> a[0], Collectors.toList()));
但是这些键也被添加到值列表中.
However the keys are also getting added to the value list.
推荐答案
您应使用Collectors::mapping
将数组映射到元素.
You should use a Collectors::mapping
to map the array to an element.
String flString = "view1:filedname11,view1:filedname12,view2:fieldname21";
Map<String, List<String>> map = Pattern.compile(",")
.splitAsStream(flString)
.map(a -> a.split(":"))
.collect(
Collectors.groupingBy(a -> a[0],
Collectors.mapping(a -> a[1], Collectors.toList())
)
);
map.entrySet().forEach(System.out::println);
输出
view1=[filedname11, filedname12]
view2=[fieldname21]
这篇关于如何将字符串拆分为映射,并使用流通过重复键将值分组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文