然后按Java Group by收集到自定义对象列表

时间:2019-05-07 10:22:18

标签: java java-stream grouping collectors

我有一个来自csv文件的Element

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 :(得分:0)

使用Collectors.mapping作为groupingBy的下游,例如:

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

util的签名为:

Stat convertElementToStat(Element element);