随笔博文

使用Collections.sort(List,Comparator)给List排序

2023-04-11 15:27:16 michael007js 36

概要

本文章,讲解Collections.sort给List<String>排序的一种情况:

  • List<String>里的内容是整数


情景:

List<String>里的内容是整数

需求:

/** * @date 2017-07-12 * @author LTF * 把数组排成最小的数 * 题目描述 * 输入一个List集合,给集合里的数据排序,按照正序或倒序打印出集合里的所有数据。 * 例如输入集合[15,123,10,9,3] * 正序打印 :3,9,10,15,123 * 倒序打印 :123,15,10,9,3 * 思路 * 通过Collection.sort()方法中的自定义比较器实现。若num1>num2,则说明num1满足要求。 */

常规的排序方式:

    public void printListStringSort(){
       List<String> list = new ArrayList<String>();
       list.add("15");
       list.add("123");
       list.add("10");
       list.add("9");
       list.add("3");
       //常规的排序
       Collections.sort(list);
       //打印出数据
       for (String str : list) {
           System.out.println( str );
     }
 }

输出:

10
123
15
3
9

总结:输出的结果不是我们想要的,默认排序的是按照首字符的大小排序

自定义的排序方式:

    public void printListStringSort(){
       List<String> list = new ArrayList<String>();
       list.add("15");
       list.add("123");
       list.add("10");
       list.add("9");
       list.add("3");
       System.out.println( "---------------升序排列----------------" );
       // 升序排列
       Collections.sort(list, new Comparator<String>() {
           @Override
           public int compare(String o1, String o2) {
               int num1 = Integer.parseInt(o1);
               int num2 = Integer.parseInt(o2);
               if (num1 > num2) {
                   return 1;
             } else if (num1 < num2) {
                   return -1;
             } else {
                   return 0;
             }
         }
     });
       for (String str : list) {
           System.out.println(str);
     }
       System.out.println( "---------------降序排列----------------" );
       // 降序排列
       Collections.sort(list, new Comparator<String>() {
           @Override
           public int compare(String o1, String o2) {
               int num1 = Integer.parseInt(o1);
               int num2 = Integer.parseInt(o2);
               if (num1 < num2) {
                   return 1;
             } else if (num1 > num2) {
                   return -1;
             } else {
                   return 0;
             }
         }
     });
       for (String str : list) {
           System.out.println(str);
     }
 }

输出:

---------------升序排列----------------
3
9
10
15
123



---------------降序排列----------------

123
15
10
9
3

总结:输出的结果是我们想要的结果

总结:

使用Collections.sort(List<T>,Comparator<T>),可以做到给特殊的需求排序。首先我们需要实现Comparator接口,重写public int compare(Object o1, Object o2) 方法。上述的案例里,T是String,我们在获取数据时,就能直接得到String数据。 已知List<String>里的内容是整数的情况下,我们把数据转化为整数类型,然后用整数去比较,最后得出排序结果。


首页
关于博主
我的博客
搜索