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());
}
}
}