Java去重集合里面的对象_Java8利用stream的distinct()方法对list集合中的对象去重和抽取属性去重...

首先新建一个实体类Person,因为要对该对象进行去重,所以需要重写equals和hashCode方法

@Data

public class Person {

/** 编码 */

private String code;

/** 名字 */

private String name;

public Person(String code, String name) {

this.code = code;

this.name = name;

}

@Override

public boolean equals(Object o) {

if (this == o) return true;

if (o == null || getClass() != o.getClass()) return false;

Person person = (Person) o;

return code.equals(person.code) &&

name.equals(person.name);

}

@Override

public int hashCode() {

return Objects.hash(code, name);

}

}

实例化五个对象将其放入list集合中

Person person1 = new Person("001", "张三");

Person person2 = new Person("001", "张三");

Person person3 = new Person("002", "李四");

Person person4 = new Person("003", "王五");

Person person5 = new Person("004", "王五");

List personList = new ArrayList<>();

personList.add(person1);

personList.add(person2);

personList.add(person3);

personList.add(person4);

personList.add(person5);

首先我们看一下去重前

System.out.println("----------去重前----------");

long count = personList.stream().count();

System.out.println("去重之前总量为"+count);

personList.forEach(t -> System.out.println(t.toString()));

去重之后

System.out.println("----------去重后----------");

long count1 = personList.stream().distinct().count();

System.out.println("去重之后总量为"+count1);

List resultList1 = personList.stream().distinct().collect(Collectors.toList());

resultList1.forEach(t -> System.out.println(t.toString()));

输出结果为

----------去重后----------

去重之后总量为4

Person(code=001, name=张三)

Person(code=002, name=李四)

Person(code=003, name=王五)

Person(code=004, name=王五)

可见已经完成对对象的去重

接下来抽取personList中的name属性(不去重)转化为list

System.out.println("----------抽取personList中的name属性(不去重)转化为list----------");

List nameList1 = personList.stream().map(Person::getName).collect(Collectors.toList());

nameList1.forEach(t-> System.out.println(t));

输出结果为

----------抽取personList中的name属性(不去重)转化为list----------

张三

张三

李四

王五

王五

抽取personList中的name属性(去重)后转化为list

List nameList2 = personList.stream().map(Person::getName).distinct().collect(Collectors.toList());

nameList2.forEach(t-> System.out.println(t));

输出结果为

----------抽取personList中的name属性(去重)后转化为list----------

张三

李四

王五

如果要对一个 List 对象进行去重,可以使用 Java 8 Stream API 和 distinct() 方法。 假设我们有一个 Person 类,它有两个属性 name 和 age: ``` public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } } ``` 现在我们有一个 List<Person>,我们想要按照 name 去重,可以使用以下代码: ``` List<Person> people = // 获取 List<Person> 对象 List<Person> uniquePeople = people.stream() .distinct() .collect(Collectors.toList()); ``` 需要注意的是,为了让 distinct() 方法正确去重,需要在 Person实现 equals() 和 hashCode() 方法。如果没有实现,它会默认使用 Object 类的 equals() 方法进行比较,这通常不是我们想要的。因此,Person 类应该像下面这样实现: ``` public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; return age == person.age && Objects.equals(name, person.name); } @Override public int hashCode() { return Objects.hash(name, age); } } ``` 这样,当我们使用 distinct() 方法时,它就会正确地根据 name 进行去重
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值