如何分组,然后使用java8流列出toMap
原始数据如下所示:如何分组,然后使用java8流列出toMap,java,group-by,java-8,java-stream,Java,Group By,Java 8,Java Stream,原始数据如下所示: [ { 'k1': 'gbv1', 'k2': 'v2' }, { 'k1': 'gbv1', 'k2': 'v4' }, ] { 'gbv1': { 'v2': true, 'v4': true }, } 所需数据如下: [ { 'k1': 'gbv1', 'k2': 'v2' }, { 'k1': 'gbv1', 'k2': 'v4' }, ] { 'gbv1': { 'v2': true, 'v4': true },
[
{ 'k1': 'gbv1', 'k2': 'v2' },
{ 'k1': 'gbv1', 'k2': 'v4' },
]
{
'gbv1': { 'v2': true, 'v4': true },
}
所需数据如下:
[
{ 'k1': 'gbv1', 'k2': 'v2' },
{ 'k1': 'gbv1', 'k2': 'v4' },
]
{
'gbv1': { 'v2': true, 'v4': true },
}
i、 e.按k1
分组,然后选择k2
的值
我目前拥有的:
examples.stream().collect(
Collectors.groupingBy(Example::getK1,
Collectors.mapping(Example::getK2,
Collectors.toList())));
它返回k2
值的列表,而不是映射
我大部分时间都在使用javascript,这样做很容易,因为我认为它是动态的。使用
toMap
而不是映射
:
Map<String,Map<String,Boolean>> map =
examples.stream()
.collect(Collectors.groupingBy(Example::getK1,
Collectors.toMap(Example::getK2,v->true,(v1,v2)->v1)));
地图=
示例.stream()
.collect(收集器.groupingBy)(示例::getK1,
toMap(示例::getK2,v->true,(v1,v2)->v1));
这是假设
getK1()
和getK2()
返回一个String
它抛出重复键true