温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎样写 java Comparator

发布时间:2026-09-13 04:45:46 来源:亿速云 阅读:91 作者:小樊 栏目:编程语言

在 Java 中,Comparator 是用来定义对象排序规则的接口,常用于 Collections.sort()List.sort()Stream.sorted() 等场景。

下面从 基本用法 → 常见写法 → 进阶技巧 逐步说明。


一、Comparator 是什么?

java.util.Comparator<T> 是一个比较器接口,核心方法是:

int compare(T o1, T o2);

返回值含义:

  • 负数:o1 排在 o2 前面
  • 0:相等
  • 正数:o1 排在 o2 后面

二、最基础的写法(实现接口)

示例:按年龄排序

class Person {
    String name;
    int age;

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
import java.util.Comparator;

Comparator<Person> byAge = new Comparator<Person>() {
    @Override
    public int compare(Person p1, Person p2) {
        return Integer.compare(p1.age, p2.age);
    }
};

使用:

List<Person> list = ...;
list.sort(byAge);

三、Java 8+ 推荐写法(Lambda)

1️⃣ Lambda 简化

Comparator<Person> byAge = (p1, p2) -> Integer.compare(p1.age, p2.age);

2️⃣ 使用 Comparator.comparing

最推荐

Comparator<Person> byAge = Comparator.comparing(p -> p.age);

或:

Comparator<Person> byAge = Comparator.comparing(Person::getAge);

四、常见排序场景

1️⃣ 升序 / 降序

// 升序
Comparator.comparing(Person::getAge);

// 降序
Comparator.comparing(Person::getAge).reversed();

2️⃣ 多条件排序(先按年龄,再按姓名)

Comparator<Person> comparator =
    Comparator.comparing(Person::getAge)
              .thenComparing(Person::getName);

3️⃣ 处理 null 值

Comparator.comparing(
    Person::getName,
    Comparator.nullsFirst(Comparator.naturalOrder())
);
  • nullsFirst:null 排前面
  • nullsLast:null 排后面

4️⃣ 字符串长度排序

Comparator<String> byLength =
    Comparator.comparing(String::length);

五、在集合中使用

List 排序

list.sort(comparator);

Stream 排序

list.stream()
    .sorted(comparator)
    .collect(Collectors.toList());

TreeSet / TreeMap

Set<Person> set = new TreeSet<>(byAge);

六、完整示例

List<Person> people = List.of(
    new Person("Alice", 30),
    new Person("Bob", 25),
    new Person("Charlie", 30)
);

people.sort(
    Comparator.comparing(Person::getAge)
              .thenComparing(Person::getName)
);

七、总结一句话

写 Comparator 的最佳方式:

Comparator.comparing(类::属性)
          .thenComparing(类::属性)
          .reversed();

如果你有具体对象 / 排序规则(比如 Map、自定义类、复杂条件),可以直接贴代码,我可以帮你写。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI