/** * Get the results as a closeable iterator * * @param expressions * @return */ public ResultTransformer<CloseableIterator<Group>> iterate(Expression<?>... expressions) { return new GroupByIterate<K, Group>(key, expressions); }
/** * Get the results as a closeable iterator * * @param expression * @return */ 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 closeable iterator * * @param expression * @return */ public <V> ResultTransformer<CloseableIterator<V>> iterate(FactoryExpression<V> expression) { final FactoryExpression<?> transformation = FactoryExpressionUtils.wrap(expression); List<Expression<?>> args = transformation.getArgs(); return new GroupByIterate<K, V>(key, args.toArray(new Expression<?>[args.size()])) { @Override protected V transform(Group group) { // XXX Isn't group.toArray() suitable here? List<Object> args = new ArrayList<Object>(groupExpressions.size() - 1); for (int i = 1; i < groupExpressions.size(); i++) { args.add(group.getGroup(groupExpressions.get(i))); } return (V)transformation.newInstance(args.toArray()); } }; }