如何使用java8流分组然后列出toMap

hbr*_*rls 3 java group-by java-8 java-stream

原始数据是这样的:

[
    { 'k1': 'gbv1', 'k2': 'v2' },
    { 'k1': 'gbv1', 'k2': 'v4' },
]
Run Code Online (Sandbox Code Playgroud)

所需数据如下:

{
    'gbv1': { 'v2': true, 'v4': true },
}
Run Code Online (Sandbox Code Playgroud)

即分组k1,然后选择值k2

我目前拥有的:

examples.stream().collect(
    Collectors.groupingBy(Example::getK1,
        Collectors.mapping(Example::getK2,
                Collectors.toList())));
Run Code Online (Sandbox Code Playgroud)

它返回一个k2不是地图的值列表;

我大部分时间都在使用 javascript,做这种工作很容易,因为我认为它是动态的。

Era*_*ran 5

使用toMap代替mapping

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

这是假设两者getK1()getK2()返回String