我有一些类,并且正在包含List 的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)
到原始注释中所讨论的方法所使用的public Stream<Map<WorkDay, Set<LedgerItem>>> adjustWorkDays(List<WorkDay> workDays)
,该方法用于构建按工作日分组并返回的单个Map,但是可能会有N数量,因此方法应该将所有收集到的Map返回到收集器中的一个map中。如果那有意义的话? 最佳答案
我不清楚您的问题。但是我想你可能会问这样的事情?
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));
关于java-8 - 以对象为键将Java Stream映射到对象的映射,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51718888/