【集合排序】List根据对象某一字段排序的六种方法

目录

1.使用List的sort()方法,自定义一个Compartor比较器

2.使用List的sort()方法,Lambda表达式写法【写法很简单,推荐】

3.使用Collections.sort()方法【重写Comparable接口】

4.使用Collections.sort()方法【自定义Compartor比较器】

5.使用StreamAPI【推荐】

6.结合冒泡排序暴力排序


首先我们新建一个Person类,并为其设置age属性,我们后续根据该属性进行从小到大的排序。

复制代码
public class Person{
    public int age;
    .....
    此处省略get,set和toString方法方法
    .....
}

之后新建测试类Test

复制代码
public class Test {
    public static void main(String[] args) {
        List<Person> list = new ArrayList<>();
        list.add(new Person(5));
        list.add(new Person(7));
        list.add(new Person(4));
        list.add(new Person(2));
        list.add(new Person(0));
        list.add(new Person(3));
        list.add(new Person(1));
        list.add(new Person(6));
        ......
        排序方法往后看
        ......        
        System.out.println(list);
    }
}

1.使用List的sort()方法,自定义一个Compartor比较器

复制代码
public static void comp(List<Person> list){
        list.sort(
            new Comparator<Person>() {
                @Override
                public int compare(Person o1, Person o2) {
                    if ((o1.getAge() - o2.getAge()) > 0) {
                        return 1;
                    }
                    else if ((o1.getAge() - o2.getAge()) < 0) {
                        return -1;
                    }
                    else {
                        return 0;
                    }
                }
            }
        );

    }

2.使用List的sort()方法,Lambda表达式写法【写法很简单,推荐】

复制代码
public static void lambda(List<Person> list){
        list.sort(((o1,o2) -> {
            //从小到大
            return o1.age - o2.age;//此处定义比较规则,o2.age-o1.age即为从大到小
        }));
    }

3.使用Collections.sort()方法【重写Comparable接口】

注意:该方法需要元素类实现Comparable接口,并且重写compareTo方法,排序按照compareTo中的规则进行排序。

Person类

复制代码
public class Person implements Comparable<Person>{
    public int age;

	public Person(){

	}
	public Person(int age){
		this.age = age;
	}

    @Override
	public int compareTo(Person o) {
		return this.age - o.age;
	}
	
    ---------------------------------------------------------------------------------------------
    此处省略get、set和toString方法
    ------------------------------------------------------------------------------------------------
	
}

Test类中直接调用

复制代码
Collections.sort(list);

4.使用Collections.sort()方法【自定义Compartor比较器】

复制代码
public static void coll(List<Person> list){
        Collections.sort(list, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge() - o2.getAge(); //按数量从大到小排序
            }
        });
    }

注意:比较器也可以写在元素类中

复制代码
public class Person{
    public int age;

	public Person(){

	}
	public Person(int age){
		this.age = age;
	}

	public static Comparator<Person> comparator = new Comparator<Person>() {

		@Override
		public int compare(Person o1, Person o2) {
			return o2.age - o1.age;
		}
	};
    +++++++++++++
    此处省略get、set和toString方法
    +++++++++++++

}

Test类中调用

复制代码
Collections.sort(list,Person.compartor)

5.使用StreamAPI【推荐】

这种方式利用Stream API中的sorted()方法,通过Comparator.comparingInt()指定排序的字段(例如age),并使用collect()方法将排序后的元素收集到一个新的列表中。

复制代码
public static List<Person> stream(List<Person> list){
        list = list.stream()
                .sorted(Comparator.comparing(Person::getAge))
                .collect(Collectors.toList());
        return list;
    }

6.结合冒泡排序暴力排序

复制代码
public static void buubleSort(List<Person> list){
        for (int i = 0; i < list.size(); i++) {
            for(int j = 0;j<list.size() - 1;j++){
                if(list.get(j).getAge() > list.get(j+1).getAge()){
                    Person temp = list.get(j);
                    list.set(j,list.get(j+1));
                    list.set(j+1,temp);
                }
            }
        }

    }

本人还有对优先级队列倒序排序的文章,欢迎大家观看批评指正!蟹蟹
点击传送=>完成对优先级队列倒叙排序

相关推荐
江江爱编程4 分钟前
java零基础保姆级教学01
java·开发语言
9624565 分钟前
餐饮 SaaS 优惠券系统架构演进(三):优惠计算引擎——商品级计价、冲突策略与优惠分摊
java·数据库·spring boot
50万马克的面包6 分钟前
数据结构01-数据结构概念与复杂度-博客稿
数据结构
vx_Biye_Design8 分钟前
expressDeepSeek社团咨询助手的学生社团管理系统60746-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·课程设计·express
vx_Biye_Design22 分钟前
springboot宠物领养与救助平台64334-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·mysql·课程设计·宠物
泡茶喝茶写代码25 分钟前
A股量化数据工程:从 REST 接口到策略信号(第 5 篇):板块成分股映射与对齐
java·python·股票数据api·股票数据·股票数据api接口·股票api数据接口·股票量化数据接口
vx_Biye_Design26 分钟前
django就业信息推荐系统61953-计算机课程设计、毕业设计
java·vue.js·spring boot·python·架构·django·课程设计
Logic10128 分钟前
C语言/数据结构贪心算法题解:字符串趋同——逐位统计最高频率求最小修改代价
c语言·数据结构·贪心算法·字符串·时间复杂度·频率统计·算法题
知守观42 分钟前
HTML 转 PDF 方案实战:iTextPDF 与 wkhtmltopdf 踩坑复盘,附 Flying Saucer / openhtmltopdf 选型对比
java·后端
2601_9620715744 分钟前
类变量和全局变量的隔离性有什么区别?
java·开发语言·jvm