自定义分组


/**
 * @author znj
 */
public class ListUtils {
    /**
     * list 集合分组
     *
     * @param list    待分组集合
     * @param groupBy 分组Key算法
     * @param      分组Key类型
     * @param      行数据类型
     * @return 分组后的Map集合
     */
    public static  Map> groupBy(List list, GroupBy groupBy) {
        return groupBy((Collection) list, groupBy);
    }
    /**
     * list 集合分组
     *
     * @param list    待分组集合
     * @param groupBy 分组Key算法
     * @param      分组Key类型
     * @param      行数据类型
     * @return 分组后的Map集合
     */
    public static  Map> groupBy(Collection list, GroupBy groupBy) {
        Map> resultMap = new LinkedHashMap>();

        for (V e : list) {

            K k = groupBy.groupBy(e);
            if (resultMap.containsKey(k)) {
                resultMap.get(k).add(e);
            } else {
                List tmp = new LinkedList();
                tmp.add(e);
                resultMap.put(k, tmp);
            }
        }
        return resultMap;
    }
    /**
     * List分组
     *
     * @param  返回分组Key
     * @param  分组行
     */
    public interface GroupBy {
        K groupBy(V row);
    }
}