iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java去重排序之Comparable与Comparator怎么使用
  • 518
分享到

Java去重排序之Comparable与Comparator怎么使用

2023-07-05 22:07:44 518人浏览 泡泡鱼
摘要

本文小编为大家详细介绍“Java去重排序之Comparable与Comparator怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java去重排序之Comparable与Comparator怎么使用”文章能帮助大家解决疑惑,下面跟

本文小编为大家详细介绍“Java去重排序之Comparable与Comparator怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java去重排序之Comparable与Comparator怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一、排序与去重

日常工作中,总会有一些场景需要对结果集进行一些过滤。比如,与第三方交互后获取的结果集,需要再次排序去重,此时就会根据某个字段来去重,又或者某个字段来排序。

在Java中,去重的话,我们很容易就想到了Set的特性(无序无重),并且TreeSet(有序无重)还可以指定去重的规则(去重后一般是升序的结果集)。

排序的话,我们很容易想到各种排序算法,但Java中已经提供了排序的功能,如集合中sort()方法,并且还可以指定排序的字段和升降序。

在此多说一句,Set的特性(无序无重):

  • 无序:无序性不是随机性,因为放入set中的元素,会根据元素的hash值来决定所放入的位置

  • 无重:添加元素时 ,会按照元素的equals()进行判断,false认为两个元素不等时,才会添加

二、Comparable与Comparator的使用

public class CompareTest {    public static void main(String[] args) {        // 例如:从第三方返回的结果集        // 根据id去重,根据createTime降序排列        String result = "["                + "{ \"id\": 1, \"createTime\": \"2022-12-21 13:23:59\"}"                + "{ \"id\": 2, \"createTime\": \"2022-11-11 12:43:01\"}"                + "{ \"id\": 1, \"createTime\": \"2022-12-21 11:20:50\"}"                + "{ \"id\": 3, \"createTime\": \"2023-01-01 14:30:00\"}"                + "]";        JSONArray examList = jsONArray.parseArray(result);        System.out.println("初始数据集:" + examList);        // 去重,利用set特性        Comparator<JSONObject> comparator = (a, b) -> Integer.compare(a.getIntValue("id"), b.getIntValue("id"));        Set<JSONObject> set = new TreeSet<>(comparator);        examList.forEach(jo -> set.add((JSONObject) jo));        // 此时的结果是,根据id去重,并且是升序的结果(自然排序)        System.out.println("去重结果:" + set);        // 此处为了,方便演示Comparable接口的作用,故把JSON映射成实体类,进行实现接口排序,其实sorted也可以使用Comparator排序        List<ExamInfo> collect = set.stream()                .map(jo -> JSONObject.toJavaObject(jo, ExamInfo.class))                .sorted()                .collect(Collectors.toList());        System.out.println("指定排序结果:" + collect);    }}
public class ExamInfo implements Comparable<ExamInfo> {    private int id;    private String createTime;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getCreateTime() {        return createTime;    }    public void setCreateTime(String createTime) {        this.createTime = createTime;    }    @Override    public String toString() {        return "ExamInfo{" +                "id=" + id +                ", createTime='" + createTime + '\'' +                '}';    }    @Override    public int compareTo(ExamInfo o) {        // 降序        return o.getCreateTime().compareTo(this.createTime);    }}

Java去重排序之Comparable与Comparator怎么使用

关于排序升降序问题,Comparable与Comparator中的比较方法的返回值,大于0就交换。

所以参数顺序为a,b时:

  • a>b,即a-b>0,因为顺序是 a,b,交换后,b在前,a在后,排序顺序升序,即为自然排序;

 // 升序 Comparator<JSONObject> comparator = (a, b) -> Integer.compare(a.getIntValue("id"), b.getIntValue("id"));
  • b>a,即b-a>0,因为顺序是 a,b,交换后,b在前,a在后,排序顺序降序

 @Override public int compareTo(ExamInfo o) {        // 降序        return o.getCreateTime().compareTo(this.createTime);    }

三、区别


ComparableComparator
所属包java.langjava.util
是否为函数式接口
比较的方法int compareTo(T o)int compare(T o1, T o2)
使用场景比较的对象,自己可修改比较的对象,自己不能修改,或者对象实现了Comparable接口,但比较规则不适用

读到这里,这篇“Java去重排序之Comparable与Comparator怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: Java去重排序之Comparable与Comparator怎么使用

本文链接: https://www.lsjlt.com/news/355732.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java去重排序之Comparable与Comparator怎么使用
    本文小编为大家详细介绍“Java去重排序之Comparable与Comparator怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java去重排序之Comparable与Comparator怎么使用”文章能帮助大家解决疑惑,下面跟...
    99+
    2023-07-05
  • Java去重排序之Comparable与Comparator的使用及说明
    目录一、排序与去重二、Comparable与Comparator的使用三、区别总结一、排序与去重 日常工作中,总会有一些场景需要对结果集进行一些过滤。比如,与第三方交互后获取的结果集...
    99+
    2023-05-14
    Java去重排序 Java Comparable的使用 Java Comparator的使用
  • Java元素排序Comparable与Comparator的区别
    目录1.字面含义不同2.用法不同2.1 Comparable2.2 compareTo 排序方法说明2.3 Comparator3.扩展:Comparator 匿名类4.使用的场景不...
    99+
    2024-04-02
  • Java中Comparable和Comparator怎么使用
    这篇文章主要讲解了“Java中Comparable和Comparator怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中Comparable和Comparator怎么使用”吧...
    99+
    2023-07-05
  • Java stream sorted怎么使用Comparator进行多字段排序
    这篇文章主要介绍了Java stream sorted怎么使用Comparator进行多字段排序的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java stream so...
    99+
    2023-07-05
  • List排序怎么用Collections.sort和Comparator
    小编给大家分享一下List排序怎么用Collections.sort和Comparator,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! public boolean checkCourseTimes(List sched...
    99+
    2023-06-03
  • Java案例使用比较排序器comparator实现成绩排序
    需求:用TreeSet集合存储多个学生信息(姓名,语文成绩,数学成绩),并遍历该集合;要按照总分从高到低进行排序 分析: 1.创建学生类 成员变量 姓名,语文成绩、数学成绩;成员方法...
    99+
    2024-04-02
  • java中Comparable接口排序怎么实现自定义
    今天就跟大家聊聊有关java中Comparable接口排序怎么实现自定义,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。实例如下所示:class Student implements ...
    99+
    2023-05-31
    java ava comparable
  • Java stream sorted使用 Comparator 进行多字段排序的方法
    目录综述重写类的Comparable接口使用Comparator排序自然排序多字段排序注意事项Reference摘要:介绍使用Java Stream流排序器Comparator对Li...
    99+
    2023-03-06
    Java stream多字段排序 Java多字段排序
  • Java 实现使用Comparable按照我们指定的规则排序
    练习: 存储学生对象并遍历,创建TreeSet集合使用无参构造方法,并按照年龄从小到大的顺序排序,若年龄相同再按照姓名的字母顺序排序 分析: 1.创建学生类,成员变量name,age...
    99+
    2024-04-02
  • Java数据结构之插入排序与希尔排序怎么实现
    这篇文章主要介绍“Java数据结构之插入排序与希尔排序怎么实现”,在日常操作中,相信很多人在Java数据结构之插入排序与希尔排序怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java数据结构之插入排序...
    99+
    2023-07-05
  • java之使用stream对日期排序方式
    目录java使用stream对日期排序Stream对对象中的某个日期属性进行排序对日期属性进行排序,并指定日期为空时的策略排序策略对象中的多个属性进行排序字符串日期排序对字段进行排序...
    99+
    2023-05-17
    java使用stream java日期排序 java stream排序
  • 怎么使用stringbuilder去重
    使用StringBuilder去重的方法如下:1. 创建一个空的StringBuilder对象。2. 将需要去重的字符串转换为字符数...
    99+
    2023-08-15
    stringbuilder
  • Java快速排序方法怎么使用
    本篇内容介绍了“Java快速排序方法怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!快速排序思想介绍快速排序使用了分治的思想,通过一轮...
    99+
    2023-06-02
  • java collection类排序方法怎么使用
    在Java中,Collection类是一个接口,它的实现类有ArrayList、LinkedList、HashSet等。Collec...
    99+
    2024-02-29
    java
  • java集合排序工具类怎么使用
    Java集合排序工具类可以使用`java.util.Collections`类中的静态方法来实现。以下是使用Java集合排序工具类的...
    99+
    2023-10-26
    java
  • 怎么在java中使用Arrays实现排序
    这篇文章给大家介绍怎么在java中使用Arrays实现排序,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对象;3. 分布...
    99+
    2023-06-14
  • java自带排序怎么用
    这篇文章主要介绍了java自带排序怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。基本类型排序:int a[]={1,2,5,3,6,4};Arrays.sor...
    99+
    2023-06-22
  • Java中常见的查找算法与排序算法怎么使用
    这篇文章主要介绍了Java中常见的查找算法与排序算法怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java中常见的查找算法与排序算法怎么使用文章都会有所收获,下面我们一起来看看吧。1. 基本查找也叫做顺...
    99+
    2023-07-05
  • java中怎么对指令进行重新排序
    本篇文章给大家分享的是有关java中怎么对指令进行重新排序,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。指令重排序是个比较复杂、觉得有些不可思议的问题,同样是先以例子开头(建议...
    99+
    2023-05-31
    java ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作