简体   繁体   English

如何在 stream groupby

[英]how to pass a function parameter in Java 8 in stream groupby

I am using stream group by like this in Java 8:我在 Java 8 中像这样使用 stream 组:

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

Now I want to pass the group by field as a parameter in outer founction like this:现在我想通过字段分组作为外部函数中的参数,如下所示:

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

}

what should I do to make it work as expect?我应该怎么做才能使其按预期工作? I have followed tips but still encount this problem:我遵循了提示,但仍然遇到这个问题:

在此处输入图像描述

Take a look at the documentation for groupingBy .查看groupingBy的文档。

You need a Function<? super T,? extends K> classifier你需要一个Function<? super T,? extends K> classifier Function<? super T,? extends K> classifier Function<? super T,? extends K> classifier as the type, or something more specific depending on how your ReportProfitAnalysis and reportProfitResult look. Function<? super T,? extends K> classifier为类型,或者更具体的类型,具体取决于您的ReportProfitAnalysisreportProfitResult的外观。

For example:例如:

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

You can pass the grouping function可以通过分组 function

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

Note that the reportProfitResult here would be defined as Map<?, List<ReportProfitAnalysis>> reportProfitResult请注意,此处的reportProfitResult将定义为Map<?, List<ReportProfitAnalysis>> reportProfitResult

In that case, the type of groupByField should be Function<ReportProfitAnalysis, ? extends K>在这种情况下, groupByField的类型应该是Function<ReportProfitAnalysis, ? extends K> Function<ReportProfitAnalysis, ? extends K> , where K is a generic type parameter (assuming your Stream is a Stream<ReportProfitAnalysis> ). Function<ReportProfitAnalysis, ? extends K> ,其中K是泛型类型参数(假设您的StreamStream<ReportProfitAnalysis> )。

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

And you can call it, for example, with:例如,您可以这样称呼它:

MapResult(ReportProfitAnalysis::getStatisticTime);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM