Java Comparator comparingInt() 的使用

Posted ZSYL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Comparator comparingInt() 的使用相关的知识,希望对你有一定的参考价值。

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]));

后序

学习Arrays.asList() 参考asList避雷

学习List.forEach() 与 Iterator 参考迭代器

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

以上是关于Java Comparator comparingInt() 的使用的主要内容,如果未能解决你的问题,请参考以下文章

一个Java中关于Comparable和comparator的问题

Java学习之Comparable与Comparator的区别

java排序问题,comparator接口,求高手

Java_Comparable,Comparator两接口区别

Java中的comparable接口和Comparator接口的区别

JAVA comparator