List按指定规则排序的四种方法

这篇具有很好参考价值的文章主要介绍了List按指定规则排序的四种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用Collections.sort(list)可对一个List对象进行升序排序,但如果要按某种指定规则进行排序,可使用如下四种方法:

1. 使用list.sort(comparator)方法

List的sort()方法中可以传入一个自定义Comparator比较器。实现Comparator接口,重写compare方法来定义排序规则。

  • 如果compare()方法返回负整数,表示obj1小于obj2;
  • 如果compare()方法返回零,表示obj1等于obj2;
  • 如果compare()方法返回正整数,表示obj1大于obj2。
List<Integer> list = new ArrayList<>();
list.add(5);
list.add(2);
list.add(8);
// 自定义比较器,按照降序排序
Comparator<Integer> comparator = new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2.compareTo(o1);
    }
};
list.sort(comparator);

可进一步简写为lambda表达式,编译器会根据参数类型重写对应的接口方法创建匿名类对象

list.sort((o1, o2) -> {
     return o2.compareTo(o1);
});
//表达式的主体只有一行代码时可继续简写
list.sort((o1, o2) -> o2.compareTo(o1));

2. 使用Collections.sort(list, comparator)方法

Collections.sort()方法可以传入一个list和自定义Comparator比较器,根据比较器规则对list进行排序。

Collections.sort(list, comparator);
//简写
Collections.sort(list, (o1, o2) -> o2.compareTo(o1));

3.集合元素实现Comparable接口

使List中的元素实现Comparable接口,重写compareTo方法来定义元素的比较规则,然后再用Collections.sort(list)。

class Person implements Comparable<Person> {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public int compareTo(Person other) {
        // 根据年龄进行升序排序
        return Integer.compare(this.age, other.age);
    }

    public static void main(String[] args) {
        List<Person> list = new ArrayList<>();
        list.add(new Person("Alice", 25));
        list.add(new Person("Bob", 30));
        list.add(new Person("Charlie", 20));
        Collections.sort(list);
        list.forEach(x -> System.out.println(x.name + x.age));
    }
}

4. Comparator多级比较

当第一个关键字相等时还需要进行后续关键字的继续比较时,就可以用到Comparator接口中的静态方法comparing和默认方法thenComparing(),它们都接收一个函数式接口Function的实现对象作为参数文章来源地址https://www.toymoban.com/news/detail-445641.html

List<List<Integer>> lineList = new ArrayList<>();
//先按照第一个关键字比较,相等则thenComparing第二个关键字
lineList.sort(Comparator.comparing((List<Integer> o) -> o.get(0)).thenComparing(o -> o.get(1)));

到了这里,关于List按指定规则排序的四种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • List集合删除指定元素-四种方法

    第一种 for循环 输出结果为 第二种 迭代器 输出结果为 第三种 stream流 这种过滤是留下符合条件的元素 输出结果为 第四种 removeIf 方法以及 方法引用 removeIf 方法是jdk1.8 Collection以及其子类新增的,作用是过滤指定条件的元素 输出结果为 总结 不言而喻,第四种方法最好用。

    2024年02月09日
    浏览(52)
  • List移除元素的四种方式

    四种方式: 方式一,使用 Iterator ,顺序向下,如果找到元素,则使用 remove 方法进行移除。 方式二,倒序遍历 List ,如果找到元素,则使用 remove 方法进行移除。 方式三,正序遍历 List ,如果找到元素,则使用 remove 方法进行移除,然后进行索引 “自减”。 方式四,使用

    2024年02月14日
    浏览(38)
  • java中数组的四种排序

    1.1数组的基本概念 数组(Array)是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量/12713827)。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计

    2024年02月15日
    浏览(53)
  • 使用Collections.sort方法来对自定义对象进行排序

    Collections.sort方法可以用来对自定义对象进行排序。要实现这一点,需要在调用该方法时传入一个比较器,该比较器用于指定如何比较对象中的值。 举个例子,假设有一个自定义对象Person,其中包含姓名和年龄两个属性,我们可以使用以下代码对该对象列表进行按年龄排序:

    2024年02月13日
    浏览(46)
  • 最大公约数的四种方法

    求两数的最大公约数,一共有四种方法:暴力穷举法、更相减损法、辗转相除法、stein 算法,小女不才,花了几天的时间终于把这几种方法全部弄明白,现在就把它们全部分享出来。 首先,假设被求的两个数为 x、y,且 x y。最大公约数 d = gcd (x , y) 正如名字所说,暴击穷举法

    2024年02月05日
    浏览(73)
  • 检测数据类型的四种方法

    一、数据类型: 1、基本数据类型:String、Number、Boolean、Null、Undefined、Symbol 、BigInt 2、引用数据类型:Object、Array、Function、Date、RegExp 二、检测数据类型的四种方法 1.typeof检测   特点:typeof只能检测基本数据类型(除了null),不能准确的检测引用数据类型。 object、array、

    2024年02月15日
    浏览(47)
  • 数据的四种基本存储方法

    数据的存储结构可用以下四种基本存储方法得到: ( 1 )顺序存储方法     该方法把逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。     由此得到的存储表示称为顺序存储结构  (Sequential Storage Structure),通常借

    2024年02月15日
    浏览(46)
  • 实现瀑布流布局的四种方法

    页面上是一种 参差不齐 的多栏布局,类似上图所示随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部,大部分为图片,图片 固定 宽度,高度 不一 ,根据原比例缩放到宽度达到固定的要求,每行排满后,新的图片添加到后面 固定宽度,高度不一 岑

    2023年04月15日
    浏览(60)
  • 有关实现深拷贝的四种方法

            深拷贝与浅拷贝:         在开始之前我们需要先了解一下什么是浅拷贝和深拷贝,其实深拷贝和浅拷贝都是针对的引用类型,JS中的变量类型分为值类型(基本类型)和引用类型;对值类型进行复制操作会对值进行一份拷贝,而对引用类型赋值,则会进行地址

    2024年02月04日
    浏览(42)
  • 【Python--定时任务的四种方法】

    当每隔一段时间就要执行一段程序,或者往复循环执行某一个任务,这就需要使用定时任务来执行程序。应用很广泛,可以实现程序的自动化,而不需要我们手动的在规定时间内执行。如爬虫,如定时器等等。以下将介绍几种pyhton常用的定时任务方法。 执行简单,代码容易理

    2024年02月04日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包