一篇告诉你Comparator.comparing的使用

article/2025/9/29 4:19:44

Comparator.comparing用处

很多情况下sql不好解决的多表查询,临时表分组,排序,尽量用java8新特性stream进行处理,使用java8新特性

//返回 对象集合以类属性一升序排序
list.stream().sorted(Comparator.comparing(::属性一));//返回 对象集合以类属性一降序排序 注意两种写法
//先以属性一升序,结果进行属性一降序
list.stream().sorted(Comparator.comparing(::属性一).reversed());
//以属性一降序
list.stream().sorted(Comparator.comparing(::属性一,Comparator.reverseOrder()));//返回 对象集合以类属性一升序 属性二升序
list.stream().sorted(Comparator.comparing(::属性一).thenComparing(::属性二));//返回 对象集合以类属性一降序 属性二升序 注意两种写法
//先以属性一升序,升序结果进行属性一降序,再进行属性二升序
list.stream().sorted(Comparator.comparing(::属性一).reversed().thenComparing(::属性二));
//先以属性一降序,再进行属性二升序
list.stream().sorted(Comparator.comparing(::属性一,Comparator.reverseOrder()).thenComparing(::属性二));//返回 对象集合以类属性一降序 属性二降序 注意两种写法
//先以属性一升序,升序结果进行属性一降序,再进行属性二降序
list.stream().sorted(Comparator.comparing(::属性一).reversed().thenComparing(::属性二,Comparator.reverseOrder()));
//先以属性一降序,再进行属性二降序
list.stream().sorted(Comparator.comparing(::属性一,Comparator.reverseOrder()).thenComparing(::属性二,Comparator.reverseOrder()));//返回 对象集合以类属性一升序 属性二降序 注意两种写法
//先以属性一升序,升序结果进行属性一降序,再进行属性二升序,结果进行属性一降序属性二降序
list.stream().sorted(Comparator.comparing(::属性一).reversed().thenComparing(::属性二).reversed());
//先以属性一升序,再进行属性二降序
list.stream().sorted(Comparator.comparing(::属性一).thenComparing(::属性二,Comparator.reverseOrder()));

注意,注意上面的代码:

Comparator.comparing(::属性一).reversed();Comparator.comparing(::属性一,Comparator.reverseOrder());
   简单来说就是:1.先排序(默认升序),然后降序;2.直接降序排序;

简单举个例子:

有个Person类:

class Person{private int id;private int score;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public int getScore() {return score;}public void setScore(int score) {this.score = score;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Person(int id, int score, String name) {this.id = id;this.score = score;this.name = name;}@Overridepublic String toString() {return "Person{" +"id=" + id +", score=" + score +", name='" + name + '\'' +'}';}}

Main方法:

public class Test {public static void main(String[] args) {ArrayList<Person> people = new ArrayList<>();people.add(new Person(1,2,"小明"));people.add(new Person(2,3,"校长"));people.add(new Person(2,1,"小子"));people.sort(Comparator.comparing(Person::getId).thenComparing(Person::getScore));for (Person person : people) {System.out.println(person);}}
}

结果:
在这里插入图片描述


http://chatgpt.dhexx.cn/article/qdgDaE85.shtml

相关文章

详解Comparable和Comparator

目录 Comparable接口 Comparator接口 Comparable接口 Comparable接口在源码中的声明&#xff1a; public interface Comparable<T> {public int compareTo(T o); } 可以看到&#xff0c;只要一个compareTo方法&#xff0c;也就是说&#xff0c;实现Comparable接口的类…

Java Comparator的使用

这是啥&#xff1f; Comparator是个接口&#xff0c;是一个比较器&#xff0c;常用内部类的方式实现&#xff0c;常用于实现某个类的比较规则 怎么用&#xff1f; 场景&#xff1a;假如有一个字符串集合list&#xff0c;一共有10个元素&#xff0c;乱序的。现有排序规则orde…

Comparable与Comparator浅析

欢迎支持笔者新作&#xff1a;《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》&#xff0c;同时欢迎关注笔者的微信公众号&#xff1a;朱小厮的博客。 欢迎跳转到本文的原文链接&#xff1a;https://honeypps.com/java/comparable-and-comparator-analysis/ 今天…

Comparator和Comparable的区别

一、概述 Comparable和Comparator都是两个接口&#xff0c;接口都可以用来实现集合中元素的比较、排序&#xff0c;Comparator位于包java.util下&#xff0c;而Comparable位于包java.lang下&#xff0c;Comparable接口将比较代码嵌入自身类中&#xff0c;而Comparator既可以嵌入…

Comparator使用简介

1、Lambda表达式 2、Comparator使用简介 文章目录 一、使用方式1、Stream中sorted()方法2、Stream中max()方法3、Stream中排序JSONObject方法 二、具体方法1、 compare2、 equals3、 naturalOrder4、 comparing5、 comparingInt6、 comparingLong7、 comparingDouble8、 nullsF…

Comparator详解

前面我们讲过Java提供了一个用于比较的接口Comparable,提供了一个比较的方法,所有实现该接口的类,都动态的实现了该比较方法。实际上Java中除了比较一个接口外&#xff0c;还提供了一个接口&#xff0c;该接口也是具有比较的功能&#xff0c;但该接口注重的却是比较容器&#x…

Hough变换的理解

Hough变换&#xff1a; 原理&#xff1a;将一个空间映射到另一个空间。这里是将X&#xff0c;Y空间映射到R,Φ空间。看下图&#xff1a;左图是X,Y空间的直线&#xff0c;该直线方程&#xff1a;ykx b&#xff0c;确定方程的参数k,b也可以组成一个空间&#xff0c;这个空间中的…

matlab hough变换检测平行直线,浅谈Hough变换的平行直线检测改进方案

在遥感图像中,对江河上桥梁目标的识别具有重要意义。由于桥梁的最突出特征在于桥体的平行直线,所以对平行直线的实时检测十分重要。经典的Hough变换是一种常用的检测直线的方法,Hough变换的研究及应用动态:Hough变换于1962年由Paul Hough提出,并在美国作为专利被发表。它所…

Hough变换检测直线与圆的原理

霍夫变换的基本原理 霍夫变换(Hough Transform)可以理解为图像处理中的一种特征提取技术&#xff0c;通过投票算法检测具有特定形状的物体。霍夫变换运用两个坐标空间之间的变换将在一个空间中具有相同形状的曲线或直线映射到另一个坐标空间中的一个点形成峰值&#xff0c;从而…

Hough变换圆检测定位

Hough变换基本原理 Hough变换是由Paul Hough于1962年提出的一种检测圆的算法&#xff0c;它的基本思想是将图像从原图像空间变换到参数空间&#xff0c;在参数空间中&#xff0c;使用大多数边界点都满足的某种参数形式作为图像中的曲线的描述&#xff0c;它通过设置累加器对参…

【图像处理——hough变换那些事】

#老板的每一次点赞&#xff0c;都是对小编精神上的支持&#xff0c;愿各位老板一路长虹&#xff0c;学习进步。 点赞点赞&#xff01;&#xff01;&#xff01;&#xff01; #author&#xff1a;yyt time:2023.5.5 #机器学习—图像处理 #本文为小编第一次写文章&#…

基于Hough变换的直线检测(Matlab)

点击上方“3D视觉工坊”&#xff0c;选择“星标” 干货第一时间送达 作者丨无敌三脚猫 来源丨 古月居 1、引言 该程序实现了一些基本的图像处理算法&#xff0c;并将它们组合在一起&#xff0c;构建了一个基于霍夫变换的直线检测器。该程序能够在图像中找到直线段的起始点和结束…

Hough变换原理

霍夫变换在识别方程式已知的曲线是常用的一种方法&#xff0c;本文通过识别直线方程为向导&#xff0c;说明霍夫变换的原理。 话不多说&#xff0c;开始今天的主题&#xff0c;我们处理的对象是二值黑白图像&#xff0c;如下图&#xff1a; 上图是我自绘的五个点&#xff0c;考…

图像处理算法 之 Hough变换

Hough变换 一、标准Hough线变换(SHT)1.1 原理1.2 SHT步骤1.3 缺点 二、渐进概率Hough变换(PPHT)2.1 原理及步骤2.2 缺点 三、Hough圆变换3.1 原理及步骤3.2 缺点 四、实验代码 一、标准Hough线变换(SHT) 1.1 原理 标准Hough变换&#xff08;standard hough transform&#xf…

MATLAB中的Hough变换

下面来介绍一下关于Hough变换的原理及其如何在MATLAB中实现。 Hough变换&#xff1a;Hough变换是一种使用表决原理的参数估计技术。其原理是利用图像空间和Hough参数空间的点&#xff0d;线对偶性&#xff0c;把图像空间中的检测问题转换到参数空间。国内外对Hough变换的研究及…

智能图像分析——Hough变换

一、原理 引用 hough变换利用点、线对偶的思想&#xff0c;把提取图像空间中直线的问题转换成在参数空间/hough空间中计算点的峰值的问题。 在x − y坐标系中&#xff0c;假设有一条直线过点( x0 , y0 )&#xff0c;那么我们可以把这条直线的方程记为 ymxb&#xff08;1&#…

霍夫Hough变换

参考: https://blog.csdn.net/qq_15971883/article/details/80583364 MATLAB帮助文档 Hough变换是一种使用表决方式的参数估计技术,其原理是利用图像空间和Hough参数空间的线-点对偶性,把图像空间中的检测问题转换到参数空间中进行。 利用Hough变换检测直线 记住:直角坐标…

Hough变换及MATLAB示例

前言 在车道线检测中&#xff0c;最小二乘法&#xff0c;Hough变换是车道线模型拟合的传统方法之一&#xff0c;通过一系列离散的点拟合出车道直线&#xff0c;也就是得到基于像素平面坐标系的左车道和右车道直线方程。 Hough变换 Hough变换的基本思想 我们先来看看如何表达…

hough变换算法

VoteNet网络中会用Deep Hough Voting&#xff0c;所以先来学习一下Hough Voting。 正文开始 hough变换算法 1、算法思想 霍夫变换于1962年由Paul Hough 首次提出&#xff0c;后于1972年由Richard Duda和Peter Hart推广使用&#xff0c;经典霍夫变换用来检测图像中的直线&…

Hough 变换

Hough 变换是图像处理中&#xff0c;检测直线最基本&#xff0c;也是应用最广泛的一种传统方法。虽然现在是深度学习大行其道的时代&#xff0c;但是很多传统的算法&#xff0c;依然有其参考的价值所在&#xff0c;至少从数学表达上来看&#xff0c;是更加的简洁&#xff0c;有…