@Override public void update(TagsValuePair p) { Map<String, String> tags = p.tags(); if (!shouldCheckQuery || af.query().matches(tags)) { Map<String, String> newTags = tags.entrySet().stream() .filter(e -> keys.contains(e.getKey())) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); aggrs.computeIfAbsent(newTags, ks -> af.aggregator(ks, false)).update(p); } }
@Override public void update(TagsValuePair p) { Map<String, String> tags = new HashMap<>(p.tags()); if (!shouldCheckQuery || af.query().matches(tags)) { for (String k : keys) { tags.remove(k); } aggrs.computeIfAbsent(tags, ks -> af.aggregator(ks, false)).update(p); } }
@Override public void update(TagsValuePair p) { Map<String, String> tags = p.tags(); if (!shouldCheckQuery || af.query().matches(tags)) { Map<String, String> k = keyTags(tags); if (k != null) { k.putAll(queryTags); aggrs.computeIfAbsent(k, ks -> af.aggregator(ks, false)).update(p); } } }
/** * Evaluate the data expression over the input. * * @param input * Set of data values. The data will get filtered based on the query, that does * not need to be done in advance. * @return * Aggregated data values. */ default Iterable<TagsValuePair> eval(Iterable<TagsValuePair> input) { Aggregator aggr = aggregator(); for (TagsValuePair p : input) { aggr.update(p); } return aggr.result(); }
private Iterable<TagsValuePair> evalNoCheck(DataExpr expr, Iterable<TagsValuePair> input) { DataExpr.Aggregator aggr = expr.aggregator(expr.query().exactTags(), false); for (TagsValuePair p : input) { aggr.update(p); } return aggr.result(); }