如何组合然后使用java8流来定位toMap

时间:2017-12-12 09:08:48

标签: java group-by java-8 java-stream

原始数据如下:

[
    { 'k1': 'gbv1', 'k2': 'v2' },
    { 'k1': 'gbv1', 'k2': 'v4' },
]

所需数据如下:

{
    'gbv1': { 'v2': true, 'v4': true },
}

即。按k1分组,然后选择k2的值。

我现在有什么:

examples.stream().collect(
    Collectors.groupingBy(Example::getK1,
        Collectors.mapping(Example::getK2,
                Collectors.toList())));

返回k2的值列表而不是地图;

我大部分时间都使用javascript而且很容易做这样的工作,因为我觉得它很有活力。

1 个答案:

答案 0 :(得分:4)

使用toMap代替mapping

Map<String,Map<String,Boolean>> map =
    examples.stream()
            .collect(Collectors.groupingBy(Example::getK1,
                     Collectors.toMap(Example::getK2,v->true,(v1,v2)->v1)));

这假设getK1()getK2()都返回String