我有一些类,并且我在包含List
public Stream<Map<WorkDay, Set<LedgerItem>>> adjustWorkDays(List<WorkDay> workDays) {
return workDays.stream()
.sorted((d1,d2) -> d1.getCreated().compareTo(d2.getCreated()))
.map(day -> createGroupByWorkDay(day))/*need it to collect here*/;
}
如果您可以看到返回类型为Stream<Map<WorkDay, Set<LedgerItem>>>
,但我想使用收集器将其从流中映射为Map<WorkDay, Set<LedgerItem>>
,但似乎无法获得Collectors.toMap()
语法来执行任何操作但会失败。
就像我说的那样,一切正常,所以我不需要映射之外的任何东西。
仅供参考:createGroupByWorkDay
已经返回Map<WorkDay, Set<LedgerItem>>
,但是仅接受一个WorkDay
,因为这是一项要求,因此我无法更改其执行方式...
预先感谢
编辑:
因此,此处未列出的我拥有的createGroupByWorkDay
方法可以按预期工作,并且永远不会更改。它返回正确类型的Map<WorkDay, Set<LedgerItem>>
,但只有一个createGroupByWorkDay(WorkDay day)
这样的WorkDay签名,原始注释中使用该方法构建按WorkDay分组并返回的单个Map,但是,可能有N个,因此方法public Stream<Map<WorkDay, Set<LedgerItem>>> adjustWorkDays(List<WorkDay> workDays)
应该将所有收集到的Map返回到收集器中的一个map中。如果有意义的话?
答案 0 :(得分:3)
我不清楚您的问题。但是我想你可能会问这样的事情?
Map<WorkDay, List<LedgerItem>> result = workDays.stream()
.collect(Collectors.toMap(Function.identity(), WorkDay::getLedgerItems));
如果没有,请明确说明您的问题陈述。这只是一个猜测。
这是一个更新,
Map<WorkDay, List<LedgerItem>> result = workDays.stream()
.map(d -> createGroupByWorkDay(d))
.flatMap(m -> m.entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));