引言
最近在在项目中对list的一些操作还是比较多的,其中有很多内置的工具类都很强大,但是这些都是对于基本类型的操作,但是我们在项目中操作最多的是我们自定义的对象,所以一些操作还是需要我们自己来封装的,下面以排序和去重为例子。
一、去重
实体如下:
public class RobotCase implements Serializable {
/**
* 案件id
*/
private Long caseId;
/**
* 自增id
*/
private Long partnerId;
/**
* 甲方公司名称
*/
private String clientName;
/**
* 借款人姓名
*/
private String borrowerName;
/**
* 借款人性别 1 男 0 女
*/
private Byte borrowerSex;
/**
* 借款人电话
*/
private String borrowerTel;
。。。。。。。。
}
根据RobotCase实体中的borrowerTel字段进行去重,代码如下:
/**
* @param
* @return
* @description 根据电话号码去重
* @date 14:39 2018/6/19
* @author zhenghao
*/
private List<RobotCase> removeDuplicateCase(List<RobotCase> cases) {
Set<RobotCase> set = new TreeSet<>(new Comparator<RobotCase>() {
@Override
public int compare(RobotCase o1, RobotCase o2) {
//字符串,则按照asicc码升序排列
return o1.getBorrowerTel().compareTo(o2.getBorrowerTel());
}
});
set.addAll(cases);
return new ArrayList<>(set);
}
二、排序
public class Student {
private int age;
private String name;
。。。
}
具体实现
/*
* int compare(Student o1, Student o2) 返回一个基本类型的整型,
* 返回负数表示:o1 小于o2,
* 返回0 表示:o1和o2相等,
* 返回正数表示:o1大于o2。
*/
public List<Student>sort(List<Student>students){
Collections.sort(students, new Comparator<RobotCase>() {
@Override
public int compare(Student o1, Student o2) {
//按照学生的年龄进行升序排列 ;<是降序
if(o1.getAge() > o2.getAge()){
return 1;
}
if(o1.getAge() == o2.getAge()){
return 0;
}
return -1;
return o1.getAge()-o2.getAge();//升序
return o2.getAge()-o1.getAge();//降序
return o1.getName().compareTo(o2.getName()) ;// 按照姓名升序
return o2.getName().compareTo(o1.getName()) ;// 按照姓名降序
}
});
return students;
}