+ public static List<Tuple2> group(List<Tuple2> input) {
+ THashMap<Object, ArrayList<Object>> groupMap = new THashMap<Object, ArrayList<Object>>();
+ ArrayList<Tuple2> result = new ArrayList<Tuple2>();
+ for(Tuple2 t : input) {
+ Object key = t.c0;
+ ArrayList<Object> list = groupMap.get(key);
+ if(list == null) {
+ list = new ArrayList<Object>();
+ groupMap.put(key, list);
+ result.add(new Tuple2(key, list));
+ }
+ list.add(t.c1);
+ }
+ return result;
+ }
+
+ public static List<Tuple2> groupBy(Function f, List<Tuple2> input) {
+ THashMap<Object, ArrayList<Object>> groupMap = new THashMap<Object, ArrayList<Object>>();
+ ArrayList<Tuple2> result = new ArrayList<Tuple2>();
+ for(Object value : input) {
+ Object key = f.apply(value);
+ ArrayList<Object> list = groupMap.get(key);
+ if(list == null) {
+ list = new ArrayList<Object>();
+ groupMap.put(key, list);
+ result.add(new Tuple2(key, list));
+ }
+ list.add(value);
+ }
+ return result;
+ }
+
+ private static class GroupMapFunction extends FunctionImpl1<Object, List<Object>> {
+ THashMap<Object, ArrayList<Object>> groupMap;
+ public GroupMapFunction(THashMap<Object, ArrayList<Object>> groupMap) {
+ this.groupMap = groupMap;
+ }
+ @Override
+ public List<Object> apply(Object p0) {
+ List<Object> result = groupMap.get(p0);
+ if(result == null)
+ return Collections.emptyList();
+ else
+ return result;
+ }
+ }
+
+ public static Function indexGroup(List<Tuple2> input) {
+ THashMap<Object, ArrayList<Object>> groupMap = new THashMap<Object, ArrayList<Object>>();
+ for(Tuple2 t : input) {
+ Object key = t.c0;
+ ArrayList<Object> list = groupMap.get(key);
+ if(list == null) {
+ list = new ArrayList<Object>();
+ groupMap.put(key, list);
+ }
+ list.add(t.c1);
+ }
+ return new GroupMapFunction(groupMap);
+ }
+
+ public static Function indexGroupBy(Function f, List<Tuple2> input) {
+ THashMap<Object, ArrayList<Object>> groupMap = new THashMap<Object, ArrayList<Object>>();
+ for(Object value : input) {
+ Object key = f.apply(value);
+ ArrayList<Object> list = groupMap.get(key);
+ if(list == null) {
+ list = new ArrayList<Object>();
+ groupMap.put(key, list);
+ }
+ list.add(value);
+ }
+ return new GroupMapFunction(groupMap);
+ }
+