分组处理list数据

  /**
     * 需要分组的list数据
     */
    List<User> list = new ArrayList<>();
/** * 将所有的数据根据用户名称进行分组处理 */ Map<String, List<User>> userMap = ListUtil.groupBy(list, new ListUtil.GroupBy<String, User>() { @Override public String groupBy(User user) { // 根据key进行分组 String key = user.getUserName(); return key; } });
package com.bese.util;

import java.util.*;

/**
 * 按照某个字段(依据一定条件)进行分组
 *
 * @author Dell
 */
public class ListUtil {

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

        for (V e : list) {

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

 

posted @ 2021-05-19 11:03  卡农的忧伤ろ◆  阅读(96)  评论(0)    收藏  举报