Java收集器按动态字段分组
我有以下嵌套groupingBy块:Java收集器按动态字段分组,java,spring,collections,group-by,collectors,Java,Spring,Collections,Group By,Collectors,我有以下嵌套groupingBy块: Map<String,Map<String,Long>> namesCountersMap = events.stream().collect( Collectors.groupingBy( namesDAO::getName, Collectors.groupingBy(
Map<String,Map<String,Long>> namesCountersMap =
events.stream().collect(
Collectors.groupingBy(
namesDAO::getName,
Collectors.groupingBy(
genericDAO::SOME_DYNAMIC_FIELD,
Collectors.counting())
)
);
如您所见,第二级的分组是由3个不同的字段完成的,这就是为什么我需要将这段代码复制三次
如果我将fieldToGroupBy参数传递给函数,有没有方法可以动态使用它?或者,如果您对如何避免代码重复有任何其他想法,我很想听听。的第一个参数是a,因此您可以使用该类型的变量
它只是一个函数接口,带有一个用于提取要分组的值的方法,可以通过方法引用、lambda表达式、匿名类或任何其他类型的类来实现
Function<namesDAO, String> classifier2 = genericDAO::SOME_DYNAMIC_FIELD;
Map<String,Map<String,Long>> namesCountersMap =
events.stream().collect(
Collectors.groupingBy(
namesDAO::getName,
Collectors.groupingBy(
classifier2,
Collectors.counting())
)
);
Function<namesDAO, String> classifier2 = genericDAO::SOME_DYNAMIC_FIELD;
Map<String,Map<String,Long>> namesCountersMap =
events.stream().collect(
Collectors.groupingBy(
namesDAO::getName,
Collectors.groupingBy(
classifier2,
Collectors.counting())
)
);
Function<namesDAO, String> classifier2 = someDAO::getCars;
Function<namesDAO, String> classifier2 = otherDAO::getBags;
Function<namesDAO, String> classifier2 = dao -> dao.getHouses();