/** * Get the results as a closeable iterator * * @param expression projection * @return new result transformer */ public <V> ResultTransformer<CloseableIterator<V>> iterate(Expression<V> expression) { final Expression<V> lookup = getLookup(expression); return new GroupByIterate<K, V>(key, expression) { @Override protected V transform(Group group) { return group.getOne(lookup); } }; }
/** * Get the results as a list * * @param expression projection * @return new result transformer */ public <V> ResultTransformer<List<V>> list(Expression<V> expression) { final Expression<V> lookup = getLookup(expression); return new GroupByList<K, V>(key, expression) { @Override protected V transform(Group group) { return group.getOne(lookup); } }; }
/** * Get the results as a map * * @param expression projection * @return new result transformer */ @SuppressWarnings("unchecked") public <V> ResultTransformer<Map<K, V>> as(Expression<V> expression) { final Expression<V> lookup = getLookup(expression); return new GroupByMap<K, V>(key, expression) { @Override protected Map<K, V> transform(Map<K, Group> groups) { Map<K, V> results = new LinkedHashMap<K, V>((int) Math.ceil(groups.size() / 0.75), 0.75f); for (Map.Entry<K, Group> entry : groups.entrySet()) { results.put(entry.getKey(), entry.getValue().getOne(lookup)); } return results; } }; }
/** * Get the results as a closeable iterator * * @param expression projection * @return new result transformer */ public <V> ResultTransformer<CloseableIterator<V>> iterate(Expression<V> expression) { final Expression<V> lookup = getLookup(expression); return new GroupByIterate<K, V>(key, expression) { @Override protected V transform(Group group) { return group.getOne(lookup); } }; }
/** * Get the results as a list * * @param expression projection * @return new result transformer */ public <V> ResultTransformer<List<V>> list(Expression<V> expression) { final Expression<V> lookup = getLookup(expression); return new GroupByList<K, V>(key, expression) { @Override protected V transform(Group group) { return group.getOne(lookup); } }; }
/** * Get the results as a map * * @param expression projection * @return new result transformer */ @SuppressWarnings("unchecked") public <V> ResultTransformer<Map<K, V>> as(Expression<V> expression) { final Expression<V> lookup = getLookup(expression); return new GroupByMap<K, V>(key, expression) { @Override protected Map<K, V> transform(Map<K, Group> groups) { Map<K, V> results = new LinkedHashMap<K, V>((int) Math.ceil(groups.size() / 0.75), 0.75f); for (Map.Entry<K, Group> entry : groups.entrySet()) { results.put(entry.getKey(), entry.getValue().getOne(lookup)); } return results; } }; }