2 分组(group)

package com.gp6.list.group;

import com.gp6.bean.Employee;
import com.gp6.list.utils.ListUtil;

import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 测试list分组
 *
 * @author gp6
 * @date 2019-07-23
 */
public class TestGroup {
    public static void main(String[] args) {
        List<Employee> employeeList = ListUtil.packEmployeeList();

        // 根据 年龄 分组
        Map<Object, List<Employee>> ageMap = employeeList.stream().collect(Collectors.groupingBy(Employee::getAge));
        ageMap.forEach((age, list) -> {

        });

        // 先根据 性别 分组,再根据 年龄 分组
        Map<Integer, Map<Integer, List<Employee>>> sexAgeMap = employeeList.stream().collect(Collectors.groupingBy(Employee::getSex, Collectors.groupingBy(Employee::getAge)));
        sexAgeMap.forEach((sex, ageTmpMap) -> ageTmpMap.forEach((age, list) -> {

        }));


        // 根据  传入参数  进行分组
        Map<String, List<Employee>> sexMap = employeeList.stream().collect(Collectors.groupingBy(e -> groupKey(e, "sex")));
        sexMap.forEach((sex, list) -> {

        });
    }

    /**
     * list分组传参使用
     *
     * @param clazz      实体类
     * @param columnName 字段名
     * @param         泛型
     * @return 指定字段值
     */
    private static <T> String groupKey(T clazz, String columnName) {
        try {
            // 获取指定字段的方法名
            String methodName = "get" + columnName.substring(0, 1).toUpperCase() + columnName.substring(1);
            // 获取指定字段的值
            Object value = clazz.getClass().getMethod(methodName).invoke(clazz);
            if (null != value) {
                return value.toString();
            }
        } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
            e.printStackTrace();
        }
        return "";
    }
}

你可能感兴趣的:(List)