我有一些类,并且正在包含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/

10-12 05:36