[英]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
为类型,或者更具体的类型,具体取决于您的ReportProfitAnalysis
和reportProfitResult
的外观。
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
是泛型类型参数(假设您的Stream
是Stream<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.