如何对List去重,含Java8写法

一、去除List中重复的String

public class StringDp {
    public static void main(String[] args) {
        //正常普通写法
        List<String> list=new ArrayList<>();
        list.add("迪丽热巴");
        list.add("古力娜扎");
        list.add("马尔扎哈");
        list.add("迪丽热巴");
        list.add("马尔扎哈");
        System.out.println(list);
        System.out.println("去重后:"+removeListStringDp(list));
        //Java8写法
        List<String> stringDpList=list.stream().distinct().collect(Collectors.toList());
        System.out.println("JAVA8去重:"+stringDpList);
    }

    public static List<String> removeListStringDp(List<String> list){
        Set<String> set=new LinkedHashSet<>();
        set.addAll(list);
        list.clear();
        list.addAll(set);
        return list;
    }
}

二、去除List中重复的对象\对象属性

//创建一个Person类,给出构造函数,get,set方法
public class Person {
    private String name;
    private int age;
    private String ho;
    .....
    .....
    .....

//重写equals方法和hashcode方法
    @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) &&
                Objects.equals(ho, person.ho);
    }

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

public class ObjectDp {
    public static void main(String[] args) {
        Person p1=new Person("张三",18,"洗澡");
        Person p2=new Person("李四",19,"抽烟");
        Person p3=new Person("王五",20,"电影");
        Person p4=new Person("张三",18,"洗澡");
        Person p5=new Person("王五",18,"洗澡");

        //根据对象去重
        List<Person> persons= Arrays.asList(p1,p2,p3,p4,p5);
        List<Person> personList=new ArrayList<Person>();
        persons.stream().forEach(p->{
            if (!personList.contains(p)) {
                personList.add(p);
            }
        });
        System.out.println("去重前:"+persons);
        System.out.println("去重后:"+personList);

        //根据对象属性去重
        Set<Person> personSet=new TreeSet<Person>((o1, o2) -> o1.getName().compareTo(o2.getName()));
        personSet.addAll(persons);
        System.out.println("属性(名字)去重后:"+personSet);

        //java8根据对象属性去重
        List<Person> unique = persons.stream().collect(
                collectingAndThen(
                        toCollection(() -> new TreeSet<>(comparing(Person::getName))),ArrayList::new));
        System.out.println("Java8属性去重:"+unique);
    }
}

注:去除重复对象是用的contains()方法。出去重复对象属性是用的compareTo()方法。List 的contains()方法底层实现使用对象的equals方法去比较的,其实重写equals()就好,但重写了equals最好将hashCode也重写了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值