Lambda表达式,List对象集合去重
1.创建实体
@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}
3.Lambda方式去重
集合方式排序、stream方式排序对比
Collectors.collectingAndThen()数据流转处理函数
distinctByKey()自定义比较器
/** * 函数去重 利用TreeSet无重复特性 * collect 收集器 * Collectors 收集器的方法 */ public static void exceptRepeatV1(List<EmployeeDto> employeeList){ ArrayList<EmployeeDto> collect = employeeList .stream() .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(EmployeeDto::getName))), ArrayList::new)); print(collect); } /** * 自定义方式去重 * @param employeeList */ public static void exceptRepeatV2(List<EmployeeDto> employeeList){ List<EmployeeDto> collect = employeeList.stream() .filter(distinctByKey(e -> e.getName())) .collect(Collectors.toList()); print(collect); } /** * 自定义比较方法 * @param keyExtractor * @param <T> * @return */ private static <T> Predicate<T> distinctByKey(Function<? super T,?> keyExtractor){ Map<Object,Boolean> map=new ConcurrentHashMap<>(); return t -> map.putIfAbsent(keyExtractor.apply(t),Boolean.TRUE)==null; }
转载自:https://blog.csdn.net/Oaklkm/article/details/127074712