Java 分组依据然后收集到自定义对象列表
Java group by then collect to list of custom objects
我有来自 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
));
使用 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);
我有来自 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
));
使用 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);