Java 8+ 映射列表映射

我有一个这样定义的列表映射:

Map<Date,List<TimesheetContribution>> groupedByDate;

TimesheetContribution 类有一个返回双精度的方法 getHours()。

我想要的是:

Map<Date, Double> hoursMap = groupedByDate.entrySet().stream()...

其中映射值是来自 TimesheetContribution 实例的总小时数。

我能想到的唯一方法是这样的:

Map<Date, Double> toilAmounts = groupedByDate.entrySet().stream()
    .collect(Collectors.toMap(Function.identity(), value -> ???));

如您所见,我在尝试定义值映射器时遇到了麻烦,我需要一个嵌套流,对此我感到很不自在。

有什么建议么?或者我必须用老式的方式来做这件事?


一只斗牛犬
浏览 80回答 1
1回答

SMILET

您可以这样做:Map<Date, Double> hoursMap = groupedByDate.entrySet()&nbsp; &nbsp; &nbsp; &nbsp; .stream()&nbsp; &nbsp; &nbsp; &nbsp; .collect(Collectors.toMap(Map.Entry::getKey, // for a key and not an entry&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e -> e.getValue().stream()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .mapToDouble(TimesheetContribution::getHours)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .sum()));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java