如何将字符串拆分为映射,并使用流通过重复键将值分组? [英] How to split a string into a map, grouping values by duplicate keys using streams?

查看:91
本文介绍了如何将字符串拆分为映射,并使用流通过重复键将值分组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要转换以下内容

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆