code: public <V> ResultTransformer<Map<K, V>> as(FactoryExpression<V> expression) {
          final FactoryExpression<?> transformation = FactoryExpressionUtils.wrap(expression);
          List<Expression<?>> args = transformation.getArgs();
          return new GroupByMap<K, V>(key, args.toArray(new Expression<?>[args.size()])) {
  
              @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(), transform(entry.getValue()));
                  }
                  return results;
              }
  
              @SuppressWarnings("unchecked")
              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());
              }
  
          };
      }
docs: Get the results as a map
  
  @param expression projection
  @return new result transformer