簡體   English   中英

如何在 stream groupby

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

我在 Java 8 中像這樣使用 stream 組:

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

現在我想通過字段分組作為外部函數中的參數,如下所示:

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

}

我應該怎么做才能使其按預期工作? 我遵循了提示,但仍然遇到這個問題:

在此處輸入圖像描述

查看groupingBy的文檔。

你需要一個Function<? super T,? extends K> classifier Function<? super T,? extends K> classifier Function<? super T,? extends K> classifier為類型,或者更具體的類型,具體取決於您的ReportProfitAnalysisreportProfitResult的外觀。

例如:

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

可以通過分組 function

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

請注意,此處的reportProfitResult將定義為Map<?, List<ReportProfitAnalysis>> reportProfitResult

在這種情況下, groupByField的類型應該是Function<ReportProfitAnalysis, ? extends K> Function<ReportProfitAnalysis, ? extends K> ,其中K是泛型類型參數(假設您的StreamStream<ReportProfitAnalysis> )。

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

例如,您可以這樣稱呼它:

MapResult(ReportProfitAnalysis::getStatisticTime);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM