Lambda表达式(3)|(List对象转map)
Lambda表达式(3)|(List对象转map)
前言
本章节主要介绍java8的新特性Lambda表达式基于List实现根据object字段对数据进行转换、或者聚合转换。
一、java8中Lambda是什么?
Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。语法形式为 () -> {},其中 () 用来描述参数列表,{} 用来描述方法体,-> 为 lambda运算符。
二、数据准备
1.创建实体
创造Object实体
@Data @NoArgsConstructor @AllArgsConstructor @Builder public class EmployeeDto { private String id; private String name; private String no_id; private String dept; private int year; private EmpInfoPo info; }
2.初始化数据
构建List实体数据
{ "dept":"研发部1","id":"001","name":"员工1号","no_id":"YF001","year":2} { "dept":"研发部2","id":"002","name":"员工2号","no_id":"YF001","year":5} { "dept":"研发部3","id":"003","name":"员工3号","no_id":"YF001","year":7} { "dept":"研发部4","id":"004","name":"员工4号","no_id":"YF001","year":6} { "dept":"研发部5","id":"005","name":"员工5号","no_id":"YF001","year":4} { "dept":"研发部6","id":"006","name":"员工1号","no_id":"YF001","year":2}
三、list对象转map
1.常用转换方式
Collectors.toMap()函数有三个参数,第一个是key,第二个是value,第三个是key重复的时候处理方式
/** * 生成map key -> id value->name * @param employeeList */ public static void toMapV1(List<EmployeeDto> employeeList){ Map<String, String> collect = employeeList.stream() .collect(Collectors.toMap(EmployeeDto::getId, EmployeeDto::getName)); /** * (e1,e2)->e1 表示遇到重复数据的时候选择旧的还是新的 */ Map<String, String> collect2 = employeeList.stream() .collect(Collectors.toMap(EmployeeDto::getId, EmployeeDto::getName,(e1,e2)->e1)); /** * e -> e 表示取实体 */ Map<String, EmployeeDto> collect3 = employeeList.stream() .collect(Collectors.toMap(EmployeeDto::getId, e -> e)); }
2.根据条件聚合成map
Collectors.partitioningBy()函数实现判断条件,根据条件分组
/** * 按照year 分成两组数据 组成map * @param employeeList */ public static void toMapV2(List<EmployeeDto> employeeList){ Map<Boolean, List<EmployeeDto>> collect = employeeList.stream() .collect(Collectors.partitioningBy(e -> e.getYear() > 3)); }
3.根据字段聚合成map
Collectors.groupingBy()根据字段为key分组
/** * 按照name 分组生成map * @param employeeList */ public static void toMapV3(List<EmployeeDto> employeeList){ Map<String, List<EmployeeDto>> collect = employeeList.stream() .collect(Collectors.groupingBy(e -> e.getName())); }
总结
以上就是Java8新特性Lambda表达式实现集合List转map常用场景。后续会慢慢完善Lambda表达式的去重遍历过滤等
下一篇:
使用Springboot修改密码功能