List Stream distinct() 去重

Requirements:

去重List内重复对象(此处重复定义与对象属性值有关)

Achievement:

List Stream 对象调用distinct()方法,distinct()方法依赖hashCode()和equals()方法。
判断两个对象是否相同原理与HashMap定位key原理相同,先计算hashCode,如果hashCode相同继续调用equals()方法。

List<Animal> animals = new ArrayList<>(
        Arrays.asList(
                new Animal("wangwang", 3),
                new Animal("wangwang", 3),
                new Animal("guagua", 2)
        )
);
System.out.println(animals);
System.out.println(animals.stream().distinct().collect(Collectors.toList()));

Console:
[Animal{name=‘wangwang’, age=3}, Animal{name=‘wangwang’, age=3}, Animal{name=‘guagua’, age=2}]
[Animal{name=‘wangwang’, age=3}, Animal{name=‘guagua’, age=2}]

Animal Class:

public class Animal {

    private String name;

    private Integer age;

    public Animal(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o)
            return true;
        if (o == null || getClass() != o.getClass())
            return false;
        Animal animal = (Animal) o;
        return Objects.equals(name, animal.name) && Objects.equals(age, animal.age);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    @Override
    public String toString() {
        return "Animal{" + "name='" + name + '\'' + ", age=" + age + '}';
    }
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值