Java группа затем собирать в список пользовательских объектов - PullRequest
0 голосов
/ 07 мая 2019

У меня есть поток Element из файла CSV

public class Element {
    private String site;
    private String value;
    private Date date;
...
}

и я хочу сгруппировать элементы по site в список Stat объектов

public class Stat {
    private List<Info> infos;
    private String site;

    public Stat (String site, List<Info> infos) {
...
    }
}

public class Info {
    private String value;
    private Date date;
...
}

Вот где я

Map<String, List<Element>> elementsBySite = elements.stream().collect(Collectors.groupingBy(Element::getSite));

возможно ли переназначить мой список Element на список статистики в одном?

что-то вроде

Map<String, List<Stats>> statsBySite = elements
    .stream()
    .collect(Collectors.groupingBy(Element::getSite, 
        Collectors.collectingAndThen(Collectors.toList(), 
             // transform each element to Info
             // then create a Stats object with all infos for a given site
));

1 Ответ

0 голосов
/ 07 мая 2019

Используйте Collectors.mapping в качестве нисходящего потока для groupingBy, например:

Map<String, List<Stat>> elementsBySite = elements.stream()
        .collect(Collectors.groupingBy(Element::getSite,
                Collectors.mapping(e -> convertElementToStat(e),
                        Collectors.toList())));

, где подпись утилиты будет выглядеть так:

Stat convertElementToStat(Element element);
...