Java Collections.sort 多字段排序的现代实现

目录

使用Comparator链式调用

示例代码


使用Comparator链式调用

  1. Comparator.comparing():使用Comparator.comparing()方法创建基于主要字段的Comparator。
  2. thenComparing():使用thenComparing()方法添加次要排序规则。
  3. Collections.sort():调用Collections.sort()方法并传入Comparator链。

示例代码

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class User {
    String name;
    Integer age;

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    // 省略getter和setter方法
}

public class MultiFieldSort {
    public static void main(String[] args) {
        List<User> users = new ArrayList<>();
        users.add(new User("Alice", 30));
        users.add(new User("Bob", 25));
        users.add(new User("Alice", 22));
        users.add(new User("David", 30));
        users.add(new User("David", 2));
        users.add(new User("David", 10));

        // 使用Comparator链式调用进行排序
        Collections.sort(users, Comparator
                .comparing(User::getName)
                .thenComparingInt(User::getAge));

        // 也可以直接用List的sort
        //users.sort(Comparator
        //        .comparing(User::getName)
        //        .thenComparingInt(User::getAge));

        // 输出排序结果
        users.forEach(user -> System.out.println("Name: " + user.getName() + ", Age: " + user.getAge()));
    }
}

      在这个示例中,我们使用了Comparator.comparing()方法来创建一个基于用户姓名的Comparator,然后通过thenComparingInt()方法添加了一个基于用户年龄的排序规则。这样,我们就创建了一个排序规则链,它首先按照姓名排序,如果姓名相同,则按照年龄排序。

    这种方式的代码更加简洁和现代,利用了Java 8引入的lambda表达式和方法引用,使得代码更加易于阅读和维护。此外,它也避免了创建匿名内部类的需要。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值