实现Comparable接口
1,List中的如果是基本类型和String类型,可以直接使用Collections.sort(list)方法。
其实基本类型对应的包装类和String类型都实现了Compareable接口。
String a="2";
String b="3";
String c="1";
List<String> list=new ArrayList<>();
list.add(a);
list.add(b);
list.add(c);
Collections.sort(list);
2,如果是pojo实体类,需要实现Comparable接口。
User实体类实现Comparable接口
public class User implements Comparable<User>{
private Integer id;
private String name;
private Date birthday;
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", birthday=" + birthday +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public int compareTo(User o) {
int result=0;
if(this.getBirthday().before(o.getBirthday())){
result=-1;
}
if(this.getBirthday().after(o.getBirthday())){
result=1;
}
return result;
}
}
然后可以使用Collections.sort()方法
public static void main(String[] args) throws ParseException {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
List<User> userList=new ArrayList<User>();
User u1 = new User();
u1.setId(2);
u1.setBirthday(dateFormat.parse("2019-01-10"));
u1.setName("tom");
User u2 = new User();
u2.setId(3);
u2.setBirthday(dateFormat.parse("2019-01-11"));
u2.setName("jerry");
User u3 = new User();
u3.setId(1);
u3.setBirthday(dateFormat.parse("2007-01-10"));
u3.setName("jack");
List<User> users=new ArrayList<User>();
users.add(u1);
users.add(u2);
users.add(u3);
Collections.sort(users);
for (User user : users) {
System.out.println(user);
}
}
上面的方法都是采用实现Comparable接口,实现compareTo方法,然后,调用Collections.sort()方法进行排序。
外部比较器Comparator进行排序
当需要对集合的元素进行排序的时候,可以使用java.util.Comparator创建一个比较器来进行排序。Comparator接口同样也是一个函数式接口,可以使用lambda表达式。
//方法一 users.sort((o1,o2)->o1.getBirthday().compareTo(o2.getBirthday())); //方法二 Collections.sort(users,(o1,o2)->o1.getBirthday().compareTo(o2.getBirthday()));
使用Comparator.comparing进行排序
comparing方法一
//写法一 users.sort(Comparator.comparing(e->e.getBirthday())); //写法二 users.sort(Comparator.comparing(User::getBirthday));
comparing方法二
Collections.sort(users,Comparator.comparing(User::getBirthday,(s1,s2)->{return s2.compareTo(s1);}))
使用Comparator.nullsFirst,Comparator.nullLast进行排序
当集合中存在null时,可以使用针对null友好的比较器,null元素排在集合的最前面(最后面)。
users.add(null); Collections.sort(users,Comparator.nullsFirst(Comparator.comparing(User::getBirthday))); Collections.sort(users,Comparator.nullsLast(Comparator.comparing(User::getBirthday)));
使用Comparator.thenComparing排序
可以按照多个属性进行先后排序
Collections.sort(users,Comparator.comparing(User::getBirthday).thenComparing(User::getName));
使用Comparator.reversed进行倒序
Collections.sort(users,Comparator.comparing(User::getBirthday).reversed);
posted on
浙公网安备 33010602011771号