【发布时间】:2018-08-07 04:36:00
【问题描述】:
我有一些课程,我在 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>>>,但我想使用收集器将其从 Stream 映射为 Map<WorkDay, Set<LedgerItem>>,但似乎无法让 Collectors.toMap() 语法除了中断之外做任何事情。
就像我说的,一切都很完美,所以我不需要映射之外的任何东西来工作。
仅供参考:createGroupByWorkDay 已经返回 Map<WorkDay, Set<LedgerItem>>,但只接受一个 WorkDay,因为这是一个要求,所以我无法更改它的执行方式...
提前致谢
编辑:
因此,我拥有的createGroupByWorkDay 未在此处列出的方法可以按预期完美运行,并且永远不会改变。它返回正确类型的Map<WorkDay, Set<LedgerItem>>,但只有一个工作日的签名,如createGroupByWorkDay(WorkDay day),原始评论中的问题方法使用该方法构建按工作日分组并返回的单个地图,但可能有N其中的数量,因此方法public Stream<Map<WorkDay, Set<LedgerItem>>> adjustWorkDays(List<WorkDay> workDays) 应该将收集到的所有地图返回到收集器中的一张地图中。如果这有任何意义?
【问题讨论】:
-
workDays.stream() .sorted((d1,d2) -> d1.getCreated().compareTo(d2.getCreated())).collect(Collectors.groupingBy(WorkDay::getDay,Collectors.toSet())); -
我已经尝试过了,只是不想这样工作,这就是为什么我很困惑。
标签: java-8 java-stream collectors