package com.insightfullogic.honest_profiler.core.aggregation.result.straight; import static java.util.stream.Collectors.toList; import java.util.ArrayList; import java.util.List; import com.insightfullogic.honest_profiler.core.aggregation.AggregationProfile; import com.insightfullogic.honest_profiler.core.aggregation.filter.FilterSpecification; import com.insightfullogic.honest_profiler.core.aggregation.grouping.CombinedGrouping; import com.insightfullogic.honest_profiler.core.aggregation.result.Aggregation; import com.insightfullogic.honest_profiler.core.profiles.lean.LeanNode; /** * A Flat is a list-based {@link Aggregation}. {@link LeanNode}s are aggregated by using the {@link CombinedGrouping} to * extract a String key, and each {@link Entry} in the Flat is the aggregation of all {@link LeanNode}s with the same * key. */ public class Flat extends Aggregation<Entry> { // Instance Constructors /** * Create an empty Flat for the specified {@link AggregationProfile} and {@link CombinedGrouping}. * <p> * @param source the {@link AggregationProfile} whose {@link LeanNode}s are aggregated into this Flat * @param grouping the {@link CombinedGrouping} used for aggregation */ public Flat(AggregationProfile source, CombinedGrouping grouping) { super(source, grouping, new ArrayList<>()); } /** * Internal constructor used by the {@link #filter(FilterSpecification)} method. * <p> * @param source the {@link AggregationProfile} whose {@link LeanNode}s are aggregated into this Flat * @param grouping the {@link CombinedGrouping} used for aggregation * @param data the list of {@link Entry}s in the Flat */ private Flat(AggregationProfile source, CombinedGrouping grouping, List<Entry> data) { super(source, grouping, data); } // Instance Accessors @Override public List<Entry> getData() { return super.getData(); } // Aggregation Implementation @Override public Flat filter(FilterSpecification<Entry> filterSpec) { return new Flat( getSource(), getGrouping(), getData().stream().filter(filterSpec.getFilter()).collect(toList())); } }