public static List<List<String>> rebatch(Collection<String> emails) {
        List<List<String>> lists = new ArrayList<List<String>>();
        if (null == emails || emails.size() == 0) return lists;

        Map<String,Integer> groups = new HashMap<String,Integer>();
        for (String e : emails) {
            if (groups.containsKey(e)) {
                Integer i = groups.get(e);
                groups.put(e, i+1);
            } else {
                groups.put(e, 1);
            }
        }

        lists.add(new ArrayList<String>());
        for (Map.Entry<String,Integer> e : groups.entrySet()) {
            Integer val = e.getValue();
            while(val > lists.size()) {
                lists.add(new ArrayList<String>());
            }
            for (int i = 0; i < val; i++) {
                List inner = lists.get(i);
                inner.add(e.getKey());
            }
        }
        return lists;
    }