Collect.sort()函数理解与重写

Java 8集合排序全解析:从Comparator到Lambda实战与性能优化 集合排序是Java编程中的基础操作,其核心在于定义元素间的比较规则。在Java中,这一规则主要通过Comparator接口实现,它决定了排序的逻辑与顺序。Java 8引入函数式编程后,Comparator成为函数式接口,使得排序代码可以通过Lambda表达式和方法引用大幅简化,提升了开发效率和代码可读性。这一技术革新不仅让排序写法更优雅,其背后基于TimSort的稳定排序算法也保证了O(n log n)的性能。在实际工程中,排序广泛应用于数据处理、业务规则展示和内存计算等场景,例如对用户列表按多字段(如部门 阅读详情

Collect.sort()函数 结果默认升序(既1,2,3,4)排列,可通过重写compare方法实现自定义规则排序
说明:
1.下面的代码运行在main函数中,
2.创建Student类 属性
public int s_no;
public String s_name;
public int s_class;

/*
            Collect.sort()函数重写 
         */
        ArrayList<Student> studentArr = new ArrayList<Student>();
        Student s1 = new Student();
        s1.s_no = 3;
        s1.s_name = "a";
        s1.s_class = 102;
        studentArr.add(s1);
        Student s2 = new Student();
        s2.s_no = 2;
        s2.s_name = "b";
        s2.s_class = 101;
        studentArr.add(s2);
        Student s3 = new Student();
        s3.s_no = 1;
        s3.s_name = "c";
        s3.s_class = 103;
        studentArr.add(s3);
        System.out.println("排序前:");
        for (int i = 0; i < studentArr.size(); i++) {
            System.out.println("我是" + studentArr.get(i).s_class + "班的"
                            + studentArr.get(i).s_name + "学号是"
                            + studentArr.get(i).s_no);
        }
        //Collecttions.sort()的第一个参数是要比较的数据,第二个参数是比较规则
        Collections.sort(studentArr, new Comparator<Object>() {
                    public int compare(Object o1, Object o2) {
                        //你首先设置你要比较的东西
                        //具体是把参数中的Object强制转换成你要比较的东西,这里是两个Student类
                        //这里的s1,s2与上面的s1,s2一点关系都没有,只是抽象的前者与后者的关系
                        Student s1 = (Student) o1;
                        Student s2 = (Student) o2;
                        //如果前者的学号大于后者的学号,就是前者大于后者,返回1系统就会识别是前者大于后者
                        //升序降序用大于小于或者返回值决定(重点)
                        if (s1.s_no > s2.s_no) {
                            return -1;
                        }
                        //小于同理
                        if (s1.s_no < s2.s_no) {
                            return 1;
                        }
                        //如果返回0则认为前者与后者相等
                        return 0;
                    }
        });
        //比较完毕再输出以学号排序之后的结果
        System.out.println("按学号排序后:");
        for (int i = 0; i < studentArr.size(); i++) {
            System.out.println("我是" + studentArr.get(i).s_class + "班的"
                            + studentArr.get(i).s_name + "学号是"
                            + studentArr.get(i).s_no);
        }
        //以下是以班级排序的过程
        Collections.sort(studentArr, new Comparator<Object>() {
            public int compare(Object o1, Object o2) {
                Student s1 = (Student) o1;
                Student s2 = (Student) o2;
                if (s1.s_class > s2.s_class) {
                    return 1;
                }
                if (s1.s_class < s2.s_class) {
                    return -1;
                }
                return 0;
            }
        });
        System.out.println("按班级排序后:");
        for (int i = 0; i < studentArr.size(); i++) {
            System.out.println("我是" + studentArr.get(i).s_class + "班的"
                            + studentArr.get(i).s_name + "学号是"
                            + studentArr.get(i).s_no);
        }

文章内容来源于本人通过网络各方知识的学习,理解,总结,编辑。
仅用于学习。有拷贝网络相同的代码,只声明代码通过运行测试的正确性。

Java Stream流:从集合操作到函数式编程的实战指南 在Java编程中,集合操作是处理数据的核心基础。传统方式往往涉及繁琐的循环和临时变量,代码冗长且易错。其原理在于对数据源进行迭代计算,而非存储。Java 8引入的Stream API带来了革命性的技术价值,它通过声明式编程模型和惰性求值机制,将数据处理抽象为一条可组合的流水线,显著提升了代码的简洁性、可读性以及潜在的并行计算能力。这一特性在处理**大数据集合**和实现**复杂数据转换**时尤为突出。应用场景广泛,从简单的筛选、映射、排序,到复杂的分组、归约和并行处理,Stream都能以更优雅的方式应对。本文 阅读详情

相关推荐

Java Collections算法实战:排序、查找与高频应用场景解析

在Java编程中,集合框架是处理数据结构的核心基础。排序与查找作为算法中最基础的操作,其高效实现直接影响程序性能。Java Collections框架通过封装成熟的算法,为开发者提供了稳定、高效的解决方案。例如,Collections.sort()方法底层采用TimSort算法,这是一种自适应、稳定的混合排序算法,结合了归并排序和插入排序的优点,对部分有序数据表现优异。在工程实践中,这些封装好的算法方法能显著提升开发效率,避免重复造轮子。它们广泛应用于数据处理、面试算法题解、系统性能优化等场景。本文聚焦于C

weixin_30414305的博客 306

【JAVA】Hutool CollUtil.sort 方法:多场景下的排序解决方案

Hutool CollUtil.sort 方法:多场景下的排序解决方案

hs598375774的博客 2677

Java基础:Collections.sort的两种用法详解

Collections是⼀个⼯具类,sort是其中的静态⽅法,是⽤来对类型进⾏排序的,它有两种参数形式: 第一种方法 ⾸先使⽤基本类型(此处使⽤Integer)来演示第⼀个⽅法: 运行结果如下: 可以看到,默认的排序是正序,那么如何实现逆序呢,这就要使⽤第⼆种⽅式了,即通过实现Comparator接⼝的compare⽅法来完成⾃定义排序,代码如下: 可以看到,已经实现了逆序的排序了。接下来看看⾃定义类的排序: 定义⼀个Emp类: ⾸先使⽤同样的⽅式来使⽤Collections.sort⽅法:定义泛....

流楚丶格念的博客 6837

Java中Colletcions.sort方法详解以及Comparable和Comparator两个接口的区别

java Collections.sort的用法以及Comparable和Comparator两个接口的区别

qq_41857397的博客 2947

继承多态重写重载访问修饰符泛型、final/static、super/this、equals/==、构造器是否运行、深浅零拷贝、接口抽象类、record、函数式Bean/接口、斐波那契数列、冒泡、二分

多态的必要条件:继承,重写,父类引用指向子类对象。当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误(因为是父类引用指向子类对象,通过父类引用来调用方法);如果有,再去调用子类重写的同名方法;子类没有重写则调用父类自己的方法。

の博客 306

M1/M2 Mac用户看过来:不装VirtualBox,用PD虚拟机也能跑ENSP的保姆级教程

本文为M1/M2 Mac用户提供了一份不依赖VirtualBox,使用Parallels Desktop虚拟机运行ENSP的详细指南。通过ARM架构的Win10镜像选择、组件替代方案和网络配置优化,实现ENSP核心功能的高效运行,特别适合网络工程师在苹果芯片设备上进行网络模拟。

weixin_28683065的博客 413

Collections.sort 详解

这个函数具体老师上课并没有讲解,但是考试的时候直接考了,感觉还是有点慌。所以整理一下 Collections.sort 介绍 首先注意Collections和Collection的区别。Collection是一个集合类顶级接口,直接继承他的有List和Set。具体如下 Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Collections是Java.util中的一个工具类,里面提供了一系列的静态方法用来操作Collection

weixin_45465323的博客 4222

单晶塑性abaqus-umat自学

单晶塑性abaqus-umat 摘要1. 简介2. 单晶弹塑性本构模型回顾2.1运动学 本文以翻译黄永刚老师的umat文章为主,这个颜色的为个人的理解。 摘要 包含单晶塑性的abaqus用户材料子程序。本文回顾有限元形式的单晶弹塑性和黏弹塑性,包含小变形理论,以及严格的有限变形和有限旋转理论。单晶的非弹性变形由于晶体滑移,假定遵从Schmid准则。提出多种多样的分切应力与剪切变形的自硬化和潜硬化关系,并且包含在子程序内。 1. 简介   有限元程序ABAQUS已经广泛应用在固体的变形与应力分析。除了自身大量

Niklas4088的博客 1万+

Hutool CollUtil.sortPageAll代码示例:将给定的多个集合放到一个列表(List)中,根据给定的Comparator对象排序,然后分页取数据。

这个方法其实是一个真正的组合方法,功能是:将给定的多个集合放到一个列表(List)中,根据给定的Comparator对象排序,然后分页取数据。这个方法非常类似于数据库多表查询后排序分页,这个方法存在的意义也是在此。sortPageAll2功能和sortPageAll的使用方式和结果是 一样的,区别是sortPageAll2使用了BoundedPriorityQueue这个类来存储组合后的列表,不知道哪种性能更好一些,所以就都保留了。

学亮编程手记 1038

Unity类银河战士恶魔城学习总结(P103之前 Enemy相关 , 骷髅战士,状态机,敌人状态,)

udemy的Alex银河战士恶魔城,记录我自己的学习,代码会逐渐每一p更新,仅供参考学习。

suzh1qian的博客 1633

Docker一键部署Synopsys EDA全家桶(VCS/Verdi 2018版)保姆级教程

本文提供了一份详尽的Docker容器化部署Synopsys EDA工具链(VCS/Verdi 2018版)的保姆级教程。通过环境隔离与标准化,解决传统安装的依赖冲突问题,并重点攻克了容器内GUI图形界面显示的核心难题。教程涵盖从Docker基础安装、镜像获取、容器启动配置,到使用X11转发或VNC实现Verdi完美显示的完整实践,旨在帮助芯片设计工程师快速构建稳定、可移植的一键化EDA工作环境。

weixin_29281941的博客 198

函数式编程与Stream流教程【课程笔记】

Lambda是JDK8中一个语法糖。他可以对某些匿名内部类的写法进行简化。它是函数式编程思想的一个重要体现。让我们不用关注是什么对象。而是更关注我们对数据进行了什么操作。//可能会出现空指针异常//传统的方法就是加入一个非空的判断尤其是对象中属性还是一个对象的情况下,这种的判断会更多,过多的非空判断会让我们的代码变得臃肿不堪,所以在JDK8中引入了Optional,养成Optional的习惯后可以写出更优雅的避免空指针异常的代码。

wzkb123ljyja的博客 238

导带、价带

价带是电子的“束缚态”能量区间,决定材料的化学性质;导带是电子的“自由态”能量区间,直接决定材料的导电能力;禁带宽度则是区分金属、半导体与绝缘体的核心参数。通过调控能带结构(如掺杂、应变工程),可设计出具有特定电学和光学特性的功能材料,推动电子信息、能源转换等领域的技术革新。

weixin_51552564的博客 5117

Java 8 “新”特性详解:Lambda、函数式接口、Stream、Optional 与方法引用

本文介绍了Java中的Lambda表达式和函数式接口。Lambda表达式是一种匿名函数,可以简化代码编写,其本质是函数式接口的实例。文章详细讲解了Lambda的六种语法格式,包括无参无返回值、单参数无返回值、类型推断省略、单参数省略括号、多参数有返回值等情况。同时介绍了函数式接口的概念和Java内置的四大核心函数式接口中的Consumer和Supplier接口,通过示例代码展示了它们的传统写法和Lambda写法。这些特性使Java代码更加简洁灵活,提升了语言表达能力。

Coding... 1403

手把手教你学Simulink实例--基于Simulink的电动汽车无线充电效率优化仿真

​市场规模:2025年全球无线充电市场规模将达$27亿(MarketsandMarkets数据)​技术标准Qi v1.3(最高150W)WiTricity(200W动态功率)ISO 17163(道路车辆无线充电)​节能效果:每kWh充电减少120W损耗(按每天8小时)​成本分析线圈成本:35vs58(传统方案)效率提升带来的续航增加:15km/100km。

xiaoheshang_123的博客 345

Kafka 性能优化与常见问题排查

Kafka 的高性能依赖于合理的集群设计、参数优化与高效的监控体系。生产环境中,应重点关注I/O 瓶颈、分区规划、Producer/Consumer 参数调优,并通过监控与排查手段快速定位问题,从而保障 Kafka 在实时场景下的稳定运行。

X2829352498的博客 235

Java Stream API:声明式编程与惰性求值实战解析

声明式编程是一种描述“要做什么”而非“如何做”的编程范式,它通过将业务意图与实现细节分离来提升代码的可读性和可维护性。其核心原理在于使用高阶函数和链式调用构建数据处理流水线,其中惰性求值技术能够延迟计算直到真正需要结果时才执行,从而优化性能。这种技术价值在于简化复杂逻辑、减少中间变量、支持并行处理,并易于组合和复用。在实际应用场景中,Java Stream API 是实现声明式风格的典型工具,它通过 filter、map、sorted 等操作符处理集合数据,并结合 collect 终止操作触发计算。本文以数

weixin_34327223的博客 445

YOLO26涨点改进 |独家创新,小目标涨点改进篇 | Arxiv 2025 | MHAF‑YOLO,引入RepHMS高效特征提取模块,适合轻量级目标检测、小目标检测、图像分类、旋转目标检测、实例分割

本文提出了一种改进的YOLO26目标检测模型,通过引入RepHMS模块和多分支辅助特征金字塔结构(MAFPN),显著提升了模型性能。RepHMS模块采用多分支异构卷积和重参数化策略,在不增加推理开销的情况下增强多尺度特征提取能力,尤其提升了小目标检测效果。实验表明,改进后的MHAF-YOLO模型在COCO数据集上仅用7.1M参数就达到48.9% AP,相比YOLO11-s参数量减少24.4%而性能提升1.9%。文章详细介绍了RepHMS模块的原理、实现代码及在YOLO26中的集成方法,并提供了两种改进配置。

Ai缝合怪、助力小伙伴高效发论文 199

Java Stream流操作以及lambda表达式的使用

java 中 stream简单用法以及Lambda表达式的使用

m0_51972565的博客 533

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

函数式编程实战:用纯函数、不可变性与高阶函数重构业务代码

函数式编程并非小众语言专属,而是面向主流Java/C#/Python工程师的确定性编程范式。其核心在于通过纯函数保障输入输出的可预测性,借助不可变性消除共享状态引发的并发与维护风险,并利用高阶函数和柯里化实现逻辑解耦与复用。这种思维显著降低复杂业务(如学情计算、绘图渲染、订单状态机、风控规则)的演进成本,提升单元测试覆盖率与多线程安全性。本文聚焦生产级混合式实践,覆盖Stream/LINQ/Func/Immutable Collections等真实技术栈,帮助开发者在不切换语言的前提下,用函数式思维为现有系

baochuanying9531的博客 760

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

告别照抄代码:从理解到重写的五步编程学习法

编程学习常陷入复制粘贴的误区:代码能跑,转眼就忘。真正有效的学习不是记忆代码,而是建立从阅读、推测、实现到对比反思的完整闭环。以快速排序、C语言文件读写、Python脚本和强化学习模型复现为例,通过调试器跟踪、单元测试、代码重构和自动化批量验证,将模糊的“学会了”转化为可衡量的通过标准。本文面向算法训练、开源项目阅读与论文复现等场景,提供一套无需高端硬件即可执行的工程化练习路径,帮助开发者摆脱对参考源码的依赖,真正掌握独立实现与调试能力。

weixin_33277412的博客 269

JAVA&Lambda&Stream

Lambda与Stream介绍

2302_78100610的博客 947

多维聚合后数据变形:窗口函数实战与跨维度计算

多维聚合是数据分析的基础操作,但真正的挑战在于聚合结果的再加工——如占比计算、分组排名、时间序列移动平均、条件标记和跨维度填充。这类需求本质上是在已固化的高维空间(如省×品类×时间)中,动态定义新的计算域,其核心原理依赖窗口函数的PARTITION BY与ORDER BY机制。掌握该技术可显著提升BI看板开发、指标体系建设和特征工程效率,避免将逻辑下推至应用层导致性能瓶颈与维护困难。本文聚焦SQL、PySpark与Pandas三端实操,覆盖占比归一、DENSE_RANK排名、日历对齐的移动窗口、TOP-N条

diaogan4202的博客 376

深入Chispa源码:理解PySpark测试辅助工具的实现原理

Chispa是一个强大的PySpark测试辅助工具库,专门为数据工程师和数据分析师提供优雅的测试体验。这个开源项目通过精心设计的错误消息和灵活的测试配置,让PySpark单元测试变得简单直观。本文将深入解析Chispa的核心实现原理,帮助你理解这个工具如何提升PySpark测试的效率和质量。 ## 🎯 Chispa的核心设计理念 Chispa的设计哲学围绕着"测试应该简单且富有表现力"这一核

gitblog_01143的博客 931

Java Stream API原理与实战避坑指南

Java Stream是Java 8引入的声明式集合处理机制,本质为惰性求值的计算管道,通过filter、map、collect等中间与终止操作实现函数式数据转换。其核心价值在于提升代码可读性、可测试性及并行扩展能力,广泛应用于电商实时计算、金融风控引擎和IoT数据聚合等高并发场景。但误用易引发ConcurrentModificationException、内存泄漏、性能反模式等问题。本文结合Stream生命周期、并行原理与12个线上血泪教训,系统解析filter和parallelStream等关键热词背后

weixin_33713707的博客 416

MapReduce中map阶段和reduce阶段以及shuffle过程内部工作机制记录

1.mapTask工作原理: 我们在写job任务时,指定一个FileInputFormat,设置一个路径,FileInputFormat类继承InputFormat(一个抽象接口),里面提供了一个抽象方法getSplits(),FileInputFormat中重写该方法的逻辑,对文件进行切分成多个split,然后通过RecordReader(默认使用lineRecordReader)按行进行读取文件内容并交给map去执行自己写的逻辑进行处理,被map处理之后的数据会交给OutputCollector收集器

kahhy的博客 2207
下一篇: java多线程-理解
heping_csdn
博客等级 码龄10年 2粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值