package eu.eudat.queryable.collector; import javax.persistence.Tuple; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class Collector { public List buildFromTuple(List results, Map> groupedResults, List fields, String key) { return groupedResults.keySet().stream() .map(x -> buildOne(groupedResults.get(x), fields, key)) .collect(Collectors.toList()); } private Map buildOne(List tuples, List fields, String key) { Map tupleValues = new LinkedHashMap(); List projectionFields = fields.stream() .map(x -> x.split("\\.")) .collect(Collectors.groupingBy(x -> x[0])) .values() .stream() .map(field -> new ProjectionField(field.stream().map(x -> String.join(".", x)).collect(Collectors.toList()), null)) .collect(Collectors.toList()); projectionFields.forEach(x -> x.collect(tupleValues, tuples)); return tupleValues; } }