首页 > 解决方案 > 如何在流 groupby 中传递 Java 8 中的函数参数

问题描述

我在 Java 8 中像这样使用流组:

 reportProfitResult = reportProfits.stream()
                    .collect(Collectors.groupingBy(ReportProfitAnalysis::getStatisticTime));

现在我想通过字段分组作为外部函数中的参数,如下所示:

private void MapResult(E groupByField) {   
    reportProfitResult = reportProfits.stream()
                    .collect(Collectors.groupingBy(groupByField));

}

我应该怎么做才能使其按预期工作?我遵循了提示,但仍然遇到这个问题:

在此处输入图像描述

标签: javajava-stream

解决方案


查看groupingBy的文档。

您需要 aFunction<? super T,? extends K> classifier作为类型,或者更具体的类型,具体取决于您的ReportProfitAnalysis外观reportProfitResult

例如:

private void MapResult(Function<? super ReportProfitAnalysis, ?> func) {   
    reportProfitResult = reportProfits.stream()
                .collect(Collectors.groupingBy(func));
}

您可以通过分组功能

Function<? super ReportProfitAnalysis, ?> func = ReportProfitAnalysis::getStatisticTime;

请注意,reportProfitResult此处将定义为Map<?, List<ReportProfitAnalysis>> reportProfitResult


推荐阅读