I have a stream of Element
from csv file
public class Element {
private String site;
private String value;
private Date date;
...
}
and I want to group elements by site
to a list of Stat
objects
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;
...
}
Here's where I am
Map<String, List<Element>> elementsBySite = elements.stream().collect(Collectors.groupingBy(Element::getSite));
is it possible to re-map my list of Element
to a list of stat in a single ?
something like
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
));
Use Collectors.mapping
as a downstream to groupingBy
like:
Map<String, List<Stat>> elementsBySite = elements.stream()
.collect(Collectors.groupingBy(Element::getSite,
Collectors.mapping(e -> convertElementToStat(e),
Collectors.toList())));
where the signature of the util would be as:
Stat convertElementToStat(Element element);