Java Comparator comparingInt() 的使用

本文介绍了Java中使用`Comparator.comparingInt`进行自定义排序的方法,通过`Person`类的年龄属性进行比较。同时展示了如何创建一个优先队列`PriorityQueue`并修改其默认排序规则,以年龄为关键字进行排序。示例代码详细展示了比较器的重写和使用过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

comparingInt

static <T> Comparator<T> comparingInt​(ToIntFunction<? super T> keyExtractor)
接受提取的一个函数int从类型分类键T ,并返回一个Comparator ,通过该排序关键字进行比较。
如果指定的功能也可串行化,则返回的比较器是可序列化的。 (摘自API)

  • 参数类型
    T - 要比较的元素的类型

  • 参数
    keyExtractor - 用于提取整数排序键的函数

  • 结果
    比较器,其被提取的密钥进行比较

  • 异常
    NullPointerException - 如果参数为空

API Note:
例如,要获得一个Comparator ,它比较了Person对象的姓氏,

> Comparator<Person> byLastName = Comparator.comparing(Person::getLastName);

自定义排序参数

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

// 重写比较器
class Persons implements  Comparable<Persons> {
    String name;
    int age;

    public Persons(String name, int age) {
        this.name = name;
        this.age = age;
    }
	
	// 定义此方法接受单个参数keyExtractor,该参数是用于提取整数排序键的函数。
    public int getAge() {
        return this.age;
    }

    // 按姓氏ASCII降序,反过来升序
    @Override
    public int compareTo(Persons o) {
        return this.name.compareTo(o.name);
    }
}

public class ComparatorTest {
    public static void main(String[] args) {
        // create some Persons objects
        Persons p1 = new Persons("B", 10);
        Persons p2 = new Persons("D", 20);
        Persons p3 = new Persons("A", 18);

        // before sort
        List<Persons> list = Arrays.asList(p2, p1, p3);
        System.out.println("Before Sort:");
        list.forEach(Persons -> System.out.println("Persons name"+Persons.name));

        // 自定义比较器
        Comparator<Persons> byAge = Comparator.comparingInt(Persons::getAge);
        Collections.sort(list, byAge);
        System.out.println("After Sort:");
        list.forEach(Persons -> System.out.println("Persons age"+Persons.age));
    }
}

结果

Before Name Sort:
Persons nameD
Persons nameB
Persons nameA

After Age Sort:
Persons nameB
Persons nameA
Persons nameD

优先队列,重写比较器

 // 定义优先队列,修改默认升序的排序关键字 key
PriorityQueue<int[]> minHeap = new PriorityQueue<>(Comparator.comparingInt(a -> a[1]));

后序

请参考Java Arrays.asList() 的避雷

请参考Java中 forEach() 和 Iterator 与 增强for循环 的那些事儿

参考大佬文章,及官方API,向优秀的人致敬!

加油!

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chaser&upper

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值