• 【Java/排序】将对象列表排序的三种常用方式


    对象列表排序是日常操作之一,常见方式有三种(Comparable接口、lamda表达式、Comparator),各有其长,现整理列出以备查。

    代码:

    package com.hy.lab.sortSamples;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    
    public class Test {
        public static void main(String[] args){
            // 1.Emp实现Comparable接口,用Collections.sort进行排序
            List<Emp> ls1=new ArrayList<>();
            ls1.add(new Emp("Douglas",50));
            ls1.add(new Emp("Andy",20));
            ls1.add(new Emp("Bill",30));
            ls1.add(new Emp("Cindy",40));
            Collections.sort(ls1);
            for(Emp e:ls1){
                System.out.println(e);
            }
    
            System.out.println("---------------------------------------------------");
    
            // 2.用lamda表达式进行排序,不触动Emp2
            List<Emp2> ls2=new ArrayList<>();
            ls2.add(new Emp2("Cindy",40));
            ls2.add(new Emp2("Douglas",50));
            ls2.add(new Emp2("Andy",20));
            ls2.add(new Emp2("Bill",30));
            ls2.sort((Emp2 a,Emp2 b)->a.getName().compareTo(b.getName()));// 一行流
            for(Emp2 e:ls2){
                System.out.println(e);
            }
    
            System.out.println("---------------------------------------------------");
    
            // 3.用Comparator进行排序,不触动Emp3
            List<Emp3> ls3=new ArrayList<>();
            ls3.add(new Emp3("Bill",30));
            ls3.add(new Emp3("Cindy",40));
            ls3.add(new Emp3("Douglas",50));
            ls3.add(new Emp3("Andy",20));
            ls3.sort(new Comparator<Emp3>() {
                @Override
                public int compare(Emp3 a, Emp3 b) {
                    return a.getName().compareTo(b.getName());
                }
            });
            for(Emp3 e:ls3){
                System.out.println(e);
            }
        }
    }

    输出:

    Emp name=Andy age=20
    Emp name=Bill age=30
    Emp name=Cindy age=40
    Emp name=Douglas age=50
    ---------------------------------------------------
    Emp2 name=Andy age=20
    Emp2 name=Bill age=30
    Emp2 name=Cindy age=40
    Emp2 name=Douglas age=50
    ---------------------------------------------------
    Emp3 name=Andy age=20
    Emp3 name=Bill age=30
    Emp3 name=Cindy age=40
    Emp3 name=Douglas age=50

    下面是三个对象类。

    Emp类:

    package com.hy.lab.sortSamples;
    
    public class Emp implements Comparable<Emp>{
        private String name;
        private int age;
    
        public Emp(String name,int age){
            this.name=name;
            this.age=age;
        }
    
        public String toString(){
            return String.format("Emp name=%s age=%d",name,age);
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public int compareTo(Emp o) {
            return this.name.compareTo(o.name);
        }
    }

    Emp2类:

    package com.hy.lab.sortSamples;
    
    public class Emp2 {
        private String name;
        private int age;
    
        public Emp2(String name, int age){
            this.name=name;
            this.age=age;
        }
    
        public String toString(){
            return String.format("Emp2 name=%s age=%d",name,age);
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }

    Emp3类:

    package com.hy.lab.sortSamples;
    
    public class Emp3 {
        private String name;
        private int age;
    
        public Emp3(String name, int age){
            this.name=name;
            this.age=age;
        }
    
        public String toString(){
            return String.format("Emp3 name=%s age=%d",name,age);
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }

    END

  • 相关阅读:
    转:高层游戏引擎——基于OGRE所实现的高层游戏引擎框架
    转: Orz是一个基于Ogre思想的游戏开发架构
    转:Ogre源代码浅析——脚本及其解析(一)
    IntelliJ IDEA添加过滤文件或目录
    为什么要使用ConcurrentHashMap
    volatile关键字解析
    Spring Boot MyBatis 通用Mapper 自动生成代码
    使用mysql乐观锁解决并发问题
    使用Redis分布式锁处理并发,解决超卖问题
    浅析 pagehelper 分页
  • 原文地址:https://www.cnblogs.com/heyang78/p/16266000.html
Copyright © 2020-2023  润新知