跳转至

列表排序方式

编写代码时难免会遇到列表排序的需求,一般上讲列表排序可以有如下4种方法实现:

一、简单排序

用于列表仅存储如 int 的简单数据的情况

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class sort {
  public static void main(String[] args) {
      List<Integer> list = new ArrayList<Integer>();
      list.add(new Integer(3));
      list.add(new Integer(14));
      list.add(new Integer(6));
      list.add(new Integer(10));
       // 简单的int类似数据,可以使用Collections的sort方法即可完成排序
      Collections.sort(list);
      System.out.println(list.toString());
  }
}

二、实现 Comparable 并重写 compareTo 方法

用于有复杂排序逻辑的场合,一般可以在 compareTo() 方法中放入更多的比较条件

  @Override
  public int compareTo(User user) {           
      // 重写Comparable接口的compareTo方法,根据年龄升序排列,降序修改相减顺序即可
    // 你也可以实现更复杂的比较逻辑,如将各项排序因子统计成一个具体的值用以排序等
      return this.age - user.getAge();
  }

三、 匿名内部类

本质上与方法二类似

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class sort {
  public static void main(String[] args) {
      List<User> list = new ArrayList<User>();
      list.add(new User("张三", 5));
      list.add(new User("李四", 30));
      list.add(new User("王五", 19));
      list.add(new User("王麻子", 17));
      Collections.sort(list, new Comparator<User>() {
        @Override
        public int compare(User u1, User u2) {
          int diff = u1.getAge() - u2.getAge();
          if (diff > 0) {
            return 1;
          }else if (diff < 0) {
            return -1;
          }
          return 0; //相等为0
        }
      }); // 按年龄排序
      System.out.println(list.toString());
  }
}

四、方法引用

适用于比较逻辑复杂程度介于方法一和方法二之间的排序,同时也是最为通用的排序方法

        List<Video> videoList = videoService.list(videoWrapper);
        // 根据sort字段进行排序
        videoList.sort(Comparator.comparing(Video::getSort));