简介:

当查表,的到下图中的 一个 list信息。 要将下图的信息变得有序。

List排序4种写法
方式1:JAVA中我们可以使用java.util.Collections类的sort(List list)方法对list集合中的元素排序。

方式2:JDK8之后特别是lambda表达式的盛行,而且Collections的sort方法其实是调用了List接口自己的sort方法;所以可以使用List接口自己的sort方法排序

方式3:方式2的lambda写法

方式4:Stream流的sort方法写法

排序

方法一:是用Stream流进行 排序,没能实现。就换了一个思路。

方法二:用substring 进行 string的切割。将每一个list的 4-6 切割,就切割出来了 18,16,17,15

查到了 sorted()方法排序,一个是Comparable(自然排序),一个是Comparator接口,像Integer、String等这些基本类型的包装类已经实现了Comparable接口,

集合元素是基本类型包装类型

public static void main(String[] args)  {
        List<Integer> numList=new ArrayList<>();
        numList.add(999);
        numList.add(123);
        numList.add(456);
        numList.add(66);
        numList.add(9);
 
        Collections.sort(numList);  //使用Collections类的方法排序
 
        numList.sort(new Comparator<Integer>() {//使用List接口的方法排序
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1.compareTo(o2);
            }
        });
       
        //lambda表达式实现List接口sort方法排序
        numList.sort((num1,num2)->{return num1.compareTo(num2);});
 
 
        System.out.println(numList);
 
 
    }

对象的集合根据某个属性排序

public static void main(String[] args)  {
        List<User> numList=new ArrayList<>();
        User u=new User();
        u.setSex(12);
        numList.add(u);
 
        User u1=new User();
        u1.setSex(34);
        numList.add(u1);
 
        User u2=new User();
        u2.setSex(6);
        numList.add(u2);
 
        User u3=new User();
        u3.setSex(99);
        numList.add(u3);
 
 
        //Collections类的sort方法对对象集合排序,要传集合和Comparator接口两个参数
        Collections.sort(numList, new Comparator<User>() {
            @Override
            public int compare(User o1, User o2) {
                Integer sex1= o1.getSex();
                Integer sex2= o2.getSex();
                return  sex1.compareTo(sex2);
            }
        });
        //List接口自身的sort方法对对象集合排序,重写Comparator接口方法即可
        numList.sort(new Comparator<User>() {
            @Override
            public int compare(User u1, User u2) {
                Integer sex1= u1.getSex();
                Integer sex2= u2.getSex();
                return  sex1.compareTo(sex2);
            }
        });
        
        //List接口的sort方法,lambda表达式写法
       numList.sort((u4,u5)->{
            Integer sex1= u4.getSex();
            Integer sex2= u5.getSex();
            return  sex1.compareTo(sex2);
        });
        System.out.println(numList);
 
 
    }

使用Stream流排序

list.stream().sorted(Comparator.comparing(Sortable::getOrder).reversed()).collect(Collectors.toList());

实现:

1.首先你需要list.parallelStream().sorted 进行流处理,使用parallelStream可以充分调度多核CPU。
2.使用Comparator.comparing进行排序,reversed()进行倒序排列,thenComparing进行下一个排序。
3.Comparator.comparing()里面的内容,也是就是Object::getter,例如KeywordCounterDTO::getKeyword
4.最后格式化为需要的格式 List 是.collect(Collectors.toList()) , Map 是 .collect(Collectors.toMap(KeywordCounterDTO::getKey, KeywordCounterDTO::getValue))

list = list.parallelStream().sorted(
  Comparator.comparing(KeywordCounterDTO::getAllCounter).reversed().thenComparing(KeywordCounterDTO::getKeyword)
).collect(Collectors.toList())

使用 Comparator.reversed 进行排序

/**
 *  相反的排序规则
 */
Collections.sort(employees, Comparator.comparing(Employee::getName).reversed());

employees.forEach(System.out::println)

使用 Comparator.nullsFirst进行排序

employees.add(null);  //插入一个null元素
Collections.sort(employees, Comparator.nullsFirst(Comparator.comparing(Employee::getName)));
employees.forEach(System.out::println);


Collections.sort(employees, Comparator.nullsLast(Comparator.comparing(Employee::getName)));
employees.forEach(System.out::println);

实例

需要排序的信息

进行排序的代码

grade.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                int anInt1= Integer.parseInt(o1.substring(4, 6));
                int anInt2= Integer.parseInt(o2.substring(4, 6));
                return anInt1-anInt2;
            }
        });
        return grade;
``
## 结果
![排序后结果](https://img-blog.csdnimg.cn/c01d06a876b84cda87d8bc75e2631ee3.png)


Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐