我有以下嵌套的groupingBy块:
Map> namesCountersMap =
events.stream().collect(
Collectors.groupingBy(
namesDAO::getName,
Collectors.groupingBy(
genericDAO::SOME_DYNAMIC_FIELD,
Collectors.counting())
)
);
在某些情况下,我需要调用此块3次,而我唯一要更改的是内部groupingBy字段(“ SOME_DYNAMIC_FIELD”).
基本上,我想做的是每次使用分组方式并为另一个字段(在第二级)计数,然后合并结果.
例:
{
"NamesRecords": {
"Sam": {
"Cars": 4
"Bags": 6
"Houses": 2
},
"Bob": {
"Cars": 2
"Bags": 1
"Houses": 3
},
}
}
如您所见,第二层分组是由3个不同的字段完成的,这就是为什么我需要将此代码块重复三次.
如果我将fieldToGroupBy的参数传递给函数,是否可以动态使用它?或者,如果您对避免代码重复还有其他想法,我很想听听.
解决方法:
它只是一个具有用于提取要分组的值的方法的功能接口,并且可以通过方法引用,lambda表达式,匿名类或任何其他类型的类来实现.
Function classifier2 = genericDAO::SOME_DYNAMIC_FIELD;
Map> namesCountersMap =
events.stream().collect(
Collectors.groupingBy(
namesDAO::getName,
Collectors.groupingBy(
classifier2,
Collectors.counting())
)
);
现在您可以为classifier2分配不同的值,例如
Function classifier2 = someDAO::getCars;
Function classifier2 = otherDAO::getBags;
Function classifier2 = dao -> dao.getHouses();
标签:collectors,collections,spring,java,group-by
来源: https://codeday.me/bug/20191108/2005764.html