30 lines
1011 B
Java
30 lines
1011 B
Java
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<Map> buildFromTuple(List<Tuple> results, Map<Object, List<Tuple>> groupedResults, List<String> fields, String key) {
|
|
return groupedResults.keySet().stream()
|
|
.map(x -> buildOne(groupedResults.get(x), fields, key))
|
|
.collect(Collectors.toList());
|
|
}
|
|
|
|
private Map buildOne(List<Tuple> tuples, List<String> fields, String key) {
|
|
Map tupleValues = new LinkedHashMap();
|
|
List<ProjectionField> 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;
|
|
}
|
|
}
|