项目中经常需要对list排序,第一中是在数据库中排序,第二种就是使用编程语言来排序,记录下我知道的Java中对list的排序方法
1.JDK1.7版本
1.如果对List<Integer>这中包装类型list进行排序 ,已经实现Comparable接口并重写compareTo方法(源码中可以看到)
Collections.sort(list);
2.对List<实体对象>排序
方法一:User对象必须实现Comparable接口并重写compareTo方法
public class User implements Comparable<User>{
private String name;
private Integer age;
//get和set方法
。。。。。。。。。。。。。。。
@Override
public int compareTo(User o) {
return this.age-o.getAge();//按年龄升序
//return o.getAge()-this.age;//按年龄降序
}
再调用Collections.sort(list);
方法二:Collections.sort还提供了两个参数的方法,第二个参数为为比价器,User对象不需要实现Comparable接口并重写compareTo方法
List<User> list = new ArrayList<User>();
list.add(new User("张三",32));
list.add(new User("李四",66));
list.add(new User("王五",11));
list.add(new User("赵六",20));
Collections.sort(list,new Comparator<User>() {//匿名内部类
@Override
public int compare(User o1, User o2) {
int de=o1.getAge()-o2.getAge();
if(de>0) {
return 1;
}else if(de<0){
return -1;
}
return 0;
}
});
System.out.println(list.toString());
2.JDK1.8及其更高版本
1.JDK1.8中List新增了sort()来排序
List<User> list = new ArrayList<User>();
list.add(new User("张三",32));
list.add(new User("李四",66));
list.add(new User("王五",11));
list.add(new User("赵六",20));
list.sort(new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
return o1.getAge()-o2.getAge();
}
});
System.out.println(list.toString());
2.使用lambda表达式
List<User> list = new ArrayList<User>();
list.add(new User("张三",32));
list.add(new User("李四",66));
list.add(new User("王五",11));
list.add(new User("赵六",20));
Collections.sort(list, (a,b)->a.getAge().compareTo(b.getAge()));
System.out.println(list.toString());
3.使用stream写法
List<User> list = new ArrayList<User>();
list.add(new User("张三",32));
list.add(new User("李四",66));
list.add(new User("王五",11));
list.add(new User("赵六",20));
list=list.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());//升序
//list=list.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());//降序
System.out.println(list.toString());
排序要求:先按学生年龄降序排序,年龄相等的话,则按年级升级排序
list= list.stream().sorted(Comparator.comparing(User::getAge)
.reversed()
.thenComparing(Comparator.comparing(User::getGrade))
).collect(Collectors.toList());
如果要求排序为:先按年龄降序排序,再按年级降序排序
list= list.stream().sorted(Comparator.comparing(User::getAge)
.reversed()
.thenComparing(Comparator.comparing(User::getGrade).reversed())
).collect(Collectors.toList());
总结:我知道的就这些了,有不足的地方可以在评论去回复,作为刚工作一年多的菜鸟就只有这种程度了!