网站电脑端和手机端,母婴会所网站建设,网站制作工具,山河建设有限公司网站大家好#xff0c;我是三叔#xff0c;很高兴这期又和大家见面了#xff0c;一个奋斗在互联网的打工人。
在 Java 开发中#xff0c;我们经常会面临对 List 中的对象属性去重的需求。然而#xff0c;当需要根据多个属性来进行去重时#xff0c;情况会稍微复杂一些。本篇…大家好我是三叔很高兴这期又和大家见面了一个奋斗在互联网的打工人。
在 Java 开发中我们经常会面临对 List 中的对象属性去重的需求。然而当需要根据多个属性来进行去重时情况会稍微复杂一些。本篇博客将深入探讨如何使用 Java 8 的 Stream API 来实现 List 多属性去重。
前言
在实际开发中我们常常遇到一个业务场景有一个 List 集合其中包含了多个对象需要根据对象中某个或者某些属性来进行去重操作以确保 List 中的元素在这些属性的组合下唯一。在 Java 8 中Stream API 为我我们提供了一些便捷的操作使得在开发中效率有所提升。
list 多属性去重
创建一个 RequestDto 类包含了姓名name、 id主键、状态status三个属性。我们的目标是根据姓名、id和状态这三个属性来对List 进行去重操作。
RequestDto 类
Data
public class RequestDto {private String name; // 姓名private String id; // idprivate String status; // 状态
}使用stream Api 进行去重我们先创建一些对象集合
package com.yin.demo.controller;import lombok.Data;import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
import java.util.stream.Collectors;Data
public class RequestDto {private String name;private String id;private String status;
}class demo {public static void main(String[] args) {ListRequestDto li new ArrayList();RequestDto dto1 new RequestDto();dto1.setId(1);dto1.setName(张三);dto1.setStatus(1);li.add(dto1);RequestDto dto2 new RequestDto();dto2.setId(1);dto2.setName(张三);dto2.setStatus(1);li.add(dto2);RequestDto dto3 new RequestDto();dto3.setId(1);dto3.setName(李四);dto3.setStatus(1);li.add(dto3);// ArrayListRequestDto result li.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
// () - new TreeSet(Comparator.comparing(o - o.getId() o.getName() o.getStatus()))), ArrayList::new));System.out.println(li);}
}打印集合如下 使用java8 Stream API进行去重
class demo {public static void main(String[] args) {ListRequestDto li new ArrayList();RequestDto dto1 new RequestDto();dto1.setId(1);dto1.setName(张三);dto1.setStatus(1);li.add(dto1);RequestDto dto2 new RequestDto();dto2.setId(1);dto2.setName(张三);dto2.setStatus(1);li.add(dto2);RequestDto dto3 new RequestDto();dto3.setId(1);dto3.setName(李四);dto3.setStatus(1);li.add(dto3);// java8 Stream 流去重操作通过对属性id、name、status进行去重ArrayListRequestDto result li.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() - new TreeSet(Comparator.comparing(o - o.getId() o.getName() o.getStatus()))), ArrayList::new));System.out.println(result);}
}结果如下可以看出已经成功去重 根据list中Object某个属性去重
利用 TreeSet 通过 comparing 指定某个属性来去重例如根据name属性去重
// 核心代码如下其实就是上面的多属性去重只用到了一个属性
// java8 Stream 流去重操作ArrayListRequestDto result li.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() - new TreeSet(Comparator.comparing(o - o.getName()))), ArrayList::new));结果打印如下 distinct对某个属性去重
根据对象的某个属性去重对属性分组后进行 distinct 操作返回的是去重后的属性集合
// 核心代码如下返回的是属性
// java8 Stream 流去重操作ListString result li.stream().map(RequestDto::getName).distinct().collect(Collectors.toList());打印结果如下 distinct对集合去重
// 核心代码如下返回的是对象
// java8 Stream 流去重操作ListRequestDto result li.stream().distinct().collect(Collectors.toList());打印结果如下 通过利用 Java 8 的 Stream API我们可以轻松地实现List多属性去重