【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

 

posted @   逆火狂飙  阅读(1670)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2020-05-13 SQL分词器1.10版
2018-05-13 【Python】使用hashlib进行MD5和sha1摘要计算
2018-05-13 【Python】torrentParser1.04 增加获得磁力链URI功能
2018-05-13 【Python】将对象存成json文件及从json取出对象
2018-05-13 【Python】列表(数组)的引用和拷贝
2018-05-13 【高中数学/函数/幂函数、指数函数】已知:a=2^4/3,b=4^2/5,c=25^1/3,求:a,b,c三者的大小关系?(2023年全国III卷)
2014-05-13 Win7双屏显示设置
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东
点击右上角即可分享
微信分享提示