Nic*_*ckJ 4 java java-8 java-stream
我有这样定义的列表列表:
Map<Date,List<TimesheetContribution>> groupedByDate;
Run Code Online (Sandbox Code Playgroud)
TimesheetContribution类具有getHours()方法,该方法返回double。
我想要的是:
Map<Date, Double> hoursMap = groupedByDate.entrySet().stream()...
Run Code Online (Sandbox Code Playgroud)
映射值是TimesheetContribution实例的总时数。
我能想到的唯一方法是这样的:
Map<Date, Double> toilAmounts = groupedByDate.entrySet().stream()
.collect(Collectors.toMap(Function.identity(), value -> ???));
Run Code Online (Sandbox Code Playgroud)
如您所见,尝试定义值映射器时遇到麻烦,并且我需要一个嵌套流,对此感到不舒服。
有什么建议么?还是我必须用老式的方式来做?
你可以这样:
Map<Date, Double> hoursMap = groupedByDate.entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getKey, // for a key and not an entry
e -> e.getValue().stream()
.mapToDouble(TimesheetContribution::getHours)
.sum()));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
74 次 |
最近记录: |