Java Comparator comparingInt() 的使用
Posted ZSYL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Comparator comparingInt() 的使用相关的知识,希望对你有一定的参考价值。
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_Comparable,Comparator两接口区别