[英]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
為類型,或者更具體的類型,具體取決於您的ReportProfitAnalysis
和reportProfitResult
的外觀。
例如:
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
是泛型類型參數(假設您的Stream
是Stream<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.