Java 8 将Java流映射到对象作为键的对象映射

Java 8 将Java流映射到对象作为键的对象映射,java-8,java-stream,collectors,Java 8,Java Stream,Collectors,我有一些课程,我在一个包含列表的列表中做一些工作,除了一个部分,我所有的东西都在工作。好吧,它是有效的,但不完全是我想要的 public Stream<Map<WorkDay, Set<LedgerItem>>> adjustWorkDays(List<WorkDay> workDays) { return workDays.stream() .sorted((d1,d2) -> d1.getC

我有一些课程,我在一个包含列表的列表中做一些工作,除了一个部分,我所有的东西都在工作。好吧,它是有效的,但不完全是我想要的

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*/;
}
公共流调整工作日(列出工作日){
return workDays.stream()
.sorted((d1,d2)->d1.getCreated().compareTo(d2.getCreated())
.map(day->createGroupByWorkDay(day))/*需要它在这里收集*;
}
如果您可以看到返回类型是
Stream
,但我想用收集器将其映射为
map
,但似乎无法获得
Collectors.toMap()
语法来执行除中断之外的任何操作

就像我说的,一切都很完美,所以我不需要映射之外的任何东西

仅供参考:
createGroupByWorkDay
已返回
Map
,但只接受一个
WorkDay
,因为这是一个要求,所以我无法更改执行方式

提前谢谢

编辑:
因此,我使用的
createGroupByWorkDay
方法没有在这里列出,它可以像预期的那样完美地工作,并且永远不会改变。它返回正确类型的
Map
,但只有一个像这样的工作日的签名
createGroupByWorkDay(WorkDay day)
到原始注释中讨论的方法,使用该方法来构建按WorkDay分组并返回的单个映射,但其中可能有N个,因此,方法
publicstream adjustWorkDays(List workDays)
应该将收集到的所有地图返回到收集器中的一个地图中。如果有道理的话?

我不清楚你的问题。但我猜你可能要求这样的东西

Map<WorkDay, List<LedgerItem>> result = workDays.stream()
                .collect(Collectors.toMap(Function.identity(), WorkDay::getLedgerItems));
Map 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));
Map result=workDays.stream()
.map(d->createGroupByWorkDay(d))
.flatMap(m->m.entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));

workDays.stream().sorted((d1,d2)->d1.getCreated().compareTo(d2.getCreated()).collector(collector.groupingBy(WorkDay::getDay,Collectors.toSet())我已经试过了,但它不想这样工作,这就是为什么我如此困惑。你成功了,我得到了我所需要的。