Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java收集器按动态字段分组_Java_Spring_Collections_Group By_Collectors - Fatal编程技术网

Java收集器按动态字段分组

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(

我有以下嵌套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();