【发布时间】:2014-08-06 17:17:53
【问题描述】:
我有这样的功能:
private static Map<String, ResponseTimeStats> perOperationStats(List<PassedMetricData> scopedMetrics, Function<PassedMetricData, String> classifier)
{
Map<String, List<PassedMetricData>> operationToDataMap = scopedMetrics.stream()
.collect(groupingBy(classifier));
return operationToDataMap.entrySet().stream()
.collect(toMap(Map.Entry::getKey, e -> StatUtils.mergeStats(e.getValue())));
}
有什么方法可以让 groupBy 调用执行我在第 2 行中明确执行的转换,这样我就不必在地图上单独流式传输?
更新
这是mergeStats() 的样子:
public static ResponseTimeStats mergeStats(Collection<PassedMetricData> metricDataList)
{
ResponseTimeStats stats = new ResponseTimeStats();
metricDataList.forEach(data -> stats.merge(data.stats));
return stats;
}
【问题讨论】:
-
StatUtils.mergeStats是做什么的? -
我现在已经在问题中添加了
mergeStats实现 -
收集器必须能够并行化,这看起来不像你可以用你的
mergeStats实现,因为它是当前编写的,因为没有办法组合两个ResponseTimeStats。但是您仍然可以使用我回答中的第二种方法。
标签: java lambda java-8 java-stream