Java对list集合元素进行排序的几种方式 您所在的位置:网站首页 list里的对象排序 Java对list集合元素进行排序的几种方式

Java对list集合元素进行排序的几种方式

2024-03-01 14:36| 来源: 网络整理| 查看: 265

学生数据模型如下:

 

@Data @AllArgsConstructor public class User implements Comparable{ private int age; private String sex; private int grade; @Override public int compareTo(User o) { return o.getAge()-this.getAge(); } }

包括了学生年龄,性别,年级属性

有一组学生数据集合如下:

现在要求要对这组学生数据按年龄进行排序

1:利用集合框架提供的Collections.sort实现排序,其中User需要实现比较器Comparable接口,并且实现其中compareTo接口,返回的时当前入参的学生和当前这个学生的年龄差,负数,0,正数表示当前入参比本身小,相等和大,调用Collections.sort(temp);返回的排序方式为自然排序,结果如下:

2.Collections.sort还提供了两个参数的方法,第二个参数为为比价器,如下:

 

Collections.sort(temp, new Comparator() { @Override public int compare(User o1, User o2) { return -o1.getAge()+o2.getAge(); } });

如果用这种方式实现排序,则User就不用实现Comparable,而是直接在调用sort接口时穿一个Comparator的对象,即匿名内部类,实现compare接口,如上,实现结果如下:

如果compare接口改写如下:

 

Collections.sort(temp, new Comparator() { @Override public int compare(User o1, User o2) { return o1.getAge()-o2.getAge(); } });

则排序相反,如下:

3.如果jdk版本为Java8或者更高的版本,则可以利用java8的新特性的stream流实现排序,而且user对象无需实现compare接口,代码如下:

 

//3.利用Java8的stream流和Comparator实现集合排序 temp = temp.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());

结果如下:

支持倒叙排序,在正序的基础上再调用reversed方法,代码如下:

 

temp = temp.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());

结果如下:

 

现在如果排序要求更复杂,排序要求:先按学生年龄降序排序,年龄相等的话,则按年级升级排序!则可以利用java8的stream流实现,如下:

 

temp = temp.stream().sorted(Comparator.comparing(User::getAge) .reversed() .thenComparing(Comparator.comparing(User::getGrade)) ).collect(Collectors.toList());

结果如下:

如果要求排序为:先按年龄降序排序,再按年级降序排序,代码如下:

 

temp = temp.stream().sorted(Comparator.comparing(User::getAge) .reversed() .thenComparing(Comparator.comparing(User::getGrade).reversed()) ).collect(Collectors.toList());

结果如下:

 

4.如果排序对象为数组的话,则调用数组的Arrays.sort方法同样可以实现数组的排序,不过这要求user类需要实现compare接口,同集合的sort方法类似,这边不在描述。

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有