zoukankan      html  css  js  c++  java
  • List集合排序的方法

    1、list集合中的对象实现Comparable接口

    public class User implements Comparable<User>{

    private Integer id;
    /**
      * 用户名
      */
    private String userName;

    /**
      * 年龄
      */
    private Integer age;

    @Override
    public int compareTo(User o) {
         // TODO Auto-generated method stub
         return this.age-o.age;
    }

    }

    测试类实现list按照实体类的age字段排序


    public static void main(String[] args) {
             List<User> list = Lists.newArrayList();
             User user1 = new User(23);
             User user2 = new User(2);
             User user3 = new User(43);
             list.add(user1);
             list.add(user2);
             list.add(user3);
             Collections.sort(list);
             for (User user : list) {
                 System.out.println(user.getAge());
             }


    }

    打印结果为

    2
    23
    43

    还可以根据lsit集合中的对象的某个字段获取最大值和最小值,通过Collections.min()和Collections.max()方法

    public static void main(String[] args) {
             List<User> list = Lists.newArrayList();
             User user1 = new User(23);
             User user2 = new User(2);
             User user3 = new User(43);
             list.add(user1);
             list.add(user2);
             list.add(user3);
             for (User user : list) {
                 System.out.println(Collections.min(list).getAge())
             }


    }

    打印结果为

    2

    2、通过匿名内部类来进行比较排序

    public static void main(String[] args) {

             List<Member> mList = Lists.newArrayList();
             Member member1 = new Member("李鸿章",4);
             Member member2 = new Member("张志红",2);
             Member member3 = new Member("张会生",3);
             mList.add(member1);
             mList.add(member3);
             mList.add(member2);
             //1、用Comparator匿名内部类来进行排序
             Collections.sort(mList, new Comparator<Member>() {
                 @Override
                 public int compare(Member o1, Member o2) {
                     return o1.getAge()-o2.getAge();
                 }
                
             });
             for (Member member : mList) {
                 System.out.println(member.getAge()+"---"+member.getNickname());
             }

    }

    此处为但条件排序,根据年龄进行排序,结果为

    2---张志红
    3---张会生
    4---李鸿章

    也可以按照多条件来排序,先按名称首字母排序,相同再按年龄排序

    public static void main(String[] args) {
          List<Member> mList = Lists.newArrayList();
             Member member1 = new Member("李鸿章",4);
             Member member2 = new Member("张志红",2);
             Member member3 = new Member("张会生",3);
             mList.add(member1);
             mList.add(member3);
             mList.add(member2);
             //多条件排序
             Collections.sort(mList, new Comparator<Member>() {
                 @Override
                 public int compare(Member o1, Member o2) {
                     int rs=0;
                     int a = o1.getNickname().compareTo(o2.getNickname());
                     if(a!=0) {
                         rs= a>0?-1:2;
                     }else {
                         a=o1.getAge().compareTo(o2.getAge());
                         rs= a>0?1:-1;
                     }
                     return rs;
                 }
                
             });
             for (Member member : mList) {
                 System.out.println(member.getAge()+"---"+member.getNickname());
             }
         }

    打印结果为

    4---李鸿章
    2---张志红
    3---张会生

    3、jdk1.8开始引入了lambda表达式,可以用来替换匿名内部类

    Lambda表达式的语法
    基本语法:
    (parameters) -> expression

    (parameters) ->{ statements; }

    下面是Java lambda表达式的简单例子:

    // 1. 不需要参数,返回值为 5  
    () -> 5  
      
    // 2. 接收一个参数(数字类型),返回其2倍的值  
    x -> 2 * x  
      
    // 3. 接受2个参数(数字),并返回他们的差值  
    (x, y) -> x – y  
      
    // 4. 接收2个int型整数,返回他们的和  
    (int x, int y) -> x + y  
      
    // 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)  
    (String s) -> System.out.print(s) 

    所以上面通过匿名内部类对List排序的方法就可以改写成下面的

    Collections.sort(mList,(Member m1, Member m2) ->m1.getAge().compareTo(m2.getAge()));

  • 相关阅读:
    matlab cell
    matlab linux 快捷键设置——有问题还是要解决
    latex 小结
    TOJ 1258 Very Simple Counting
    TOJ 2888 Pearls
    HDU 1248 寒冰王座
    TOJ 3486 Divisibility
    TOJ 3635 过山车
    TOJ 1840 Jack Straws
    HDU 4460 Friend Chains
  • 原文地址:https://www.cnblogs.com/liaopeng/p/8392654.html
Copyright © 2011-2022 走看看