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 <T> 泛型
* @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 "";
}
}
网友评论