Сопоставить поток Java с картой объектов с объектом в качестве ключа

У меня есть несколько классов, и я делаю некоторую работу в 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) к рассматриваемому методу в исходном комментарии он используется для построения отдельных карт, которые сгруппированы по WorkDay и возвращаются, но их может быть N, поэтому метод public Stream<Map<WorkDay, Set<LedgerItem>>> adjustWorkDays(List<WorkDay> workDays) должен вернуть все эти Карты, собранные в одну карту в коллекторе. Если это имеет какой-то смысл?

1 ответ

Решение

Ваш вопрос мне не понятен. Но я думаю, что вы, возможно, просите что-то подобное?

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));
Другие вопросы по тегам