List集合中的对象按照某个字段去重实现

List集合中的对象按照某个字段去重实现
package test;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;


/**
 * List集合中的对象按照某个字段去重实现
 * 
 */
public class DuplicateOrderTest {
    public static void main(String[] args) {
        List<OrderVO> orderList = new ArrayList<OrderVO>();
        OrderVO orderVO = new OrderVO();
        orderVO.setOrderNo("11");
        orderVO.setUserId("aa");
        orderList.add(orderVO);

        orderVO = new OrderVO();
        orderVO.setOrderNo("22");
        orderVO.setUserId("bb");
        orderList.add(orderVO);

        orderVO = new OrderVO();
        orderVO.setOrderNo("33");
        orderVO.setUserId("aa");
        orderList.add(orderVO);
        
        List<OrderVO> dataList = removeDuplicateOrder(orderList);
        for(OrderVO data : dataList){
            System.out.println(data.getOrderNo() + ":" + data.getUserId());
        }
    }

    /**
     * 去重
     * 
     * @param orderList
     * @return
     * @author jqlin
     */
    private static List<OrderVO> removeDuplicateOrder(List<OrderVO> orderList) {
        Set<OrderVO> set = new TreeSet<OrderVO>(new Comparator<OrderVO>() {
            @Override
            public int compare(OrderVO a, OrderVO b) {
                // 字符串则按照asicc码升序排列
                return a.getUserId().compareTo(b.getUserId());
            }
        });
        
        set.addAll(orderList);
        return new ArrayList<OrderVO>(set);
    }
}

 

package test;

public class OrderVO {
    private String orderNo;

    private String userId;

    public String getOrderNo() {
        return orderNo;
    }

    public void setOrderNo(String orderNo) {
        this.orderNo = orderNo;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }
}

 

 



 

对象重复是指对象里面的变量的值都相等,并不定是地址。list集合存储的类型是基础类型还比较好办,直接把list集合转换成set集合就会自动去除。

当set集合存储的是对象类型时,需要在对象的实体类里面重写public boolean equals(Object obj) {} 和 public int hashCode() {} 两个方法。

 

 

 

实体类

 

packagetest;
public class Student {
    public String id;
    public String name;
    public Student() {
    }
   publicStudent(String id, Stringname) {
        this.id= id;
        this.name= name;
    }
    publicString getId() {
        returnid;
    }
    public voidsetId(String id) {
        this.id= id;
    }
    publicString getName() {
        returnname;
    }
    public voidsetName(String name) {
        this.name= name;
    }
    @Override
    public booleanequals(Object obj) {
        Student s = (Student) obj;
        returnid.equals(s.id) && name.equals(s.name);
    }
    @Override
    public inthashCode() {
        String in = id+ name;
        returnin.hashCode();
    }
}

 

 

 

 

 

测试类

 

 

packagetest;
importjava.util.ArrayList;
importjava.util.HashSet;
importjava.util.List;
importjava.util.Set;
public classRemoveReapt {
    public static voidmain(String[] args) {
        List<Student> stu = new ArrayList<Student>();
        stu.add(newStudent("1","yi"));
        stu.add(newStudent("3","san"));
        stu.add(newStudent("3","san"));
        stu.add(newStudent("2","er"));
        stu.add(newStudent("2","er"));
        //set集合保存的是引用不同地址的对象
        Set<Student> ts =new HashSet<Student>();
        ts.addAll(stu);
        for(Student student : ts) {
            System.out.println(student.getId() +"-" + student.getName());
        }
    }
}

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值