用Java对HashMap排序

介绍:

在本教程中,我们将学习如何对Java HashMap进行排序。 我们可以按键或按值对HashMap进行排序。 我们将讨论这两种策略。

对Java

为了跟上本文的其余部分,我们首先构造一个HashMap:

HashMap<Integer, Student> map = new HashMap<>();map.put(1003, new Student(1003, "Sam"));
map.put(1005, new Student(1005, "Joseph"));
map.put(1001, new Student(1001, "Kate"));
map.put(1002, new Student(1002, "Miranda"));
map.put(1004, new Student(1004, "Peter"));

其中Student是一个具有ID名称作为其字段的POJO:

class Student {private Integer id;private String name;Student(Integer id, String name) {this.id = id;this.name = name;}public String toString() {return "[id="+id + ", name=" + name + "]";}}

现在,让我们看一下可以对HashMap进行排序的不同方法

1.使用

众所周知, TreeMap是一个排序的Map ,默认情况下,元素是根据其键的自然顺序进行排序的。 因此,一种基本方法是将所有元素从HashMap推送到TreeMap:

TreeMap<Integer, Student> sortedMap = new TreeMap<>(map);//Or elseTreeMap<Integer, Student> sortedMap = new TreeMap<>();
sortedMap.putAll(map);

请注意, 我们可以将原始HashMap本身传递到构造函数中,也可以使用putAll()方法。 这样,我们的sortedMap将按键值的排序顺序保存元素:

{1001=[id=1001, name=Kate], 1002=[id=1002, name=Miranda]
, 1003=[id=1003, name=Sam], 1004=[id=1004, name=Peter]
, 1005=[id=1005, name=Joseph]}

2.使用ArrayList:

如果我们只需要排序的键或值,而不真正在乎Map ,则可以使用ArrayList。

在这里,我们将首先将键或值提取到ArrayList中 ,然后使用Collections.sort()列表进行排序:

List<Integer> mapKeys = new ArrayList<>(map.keySet());
Collections.sort(mapKeys);//Or
List<Student> mapValues = new ArrayList<>(map.values()); 
Collections.sort(mapValues);

在这里,仅当我们的学生实现Comparable时,才可以按值对Map进行排序

public class Student implements Comparable<Student> {...public int compareTo(Student other) {return this.id.compareTo(other.id);}
}

之所以如此,是因为我们地图中的值是一个自定义类型对象– Student

3.使用TreeSet:

如果我们还打算避免在键或值的结果列表中出现任何重复,则可以选择TreeSet:

SortedSet<String> mapKeys = new TreeSet<>(map.keySet());

同样,我们可以创建一组排序的地图值。 但是, 我们必须重写equals()hashCode()方法,以使其适用于自定义对象。

4. Java 8流:

从Java 8开始,我们可以使用Stream API对地图进行排序。 要使用键对Java Map进行排序,我们需要:

Map<Integer, Student> sortedMap = map.entrySet().stream().sorted(Map.Entry.comparingByKey()).collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue,(e1, e2) -> e1,LinkedHashMap::new));

在这里, 我们将排序后的地图收集到LinkedHashMap中,以保留排序后的order

同样,要按值对地图进行排序,我们将使用compareByValue()

sortedMap = map.entrySet().stream().sorted(Map.Entry.comparingByValue()).collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue,(e1, e2) -> e1,LinkedHashMap::new));

通常,在处理自定义对象时,该对象必须实现Comparable接口。

我们有一篇有关Java 8 Collectors的详细文章,它将帮助您了解Collectors.toMap()方法的用法。

为了按降序对地图进行排序,我们可以简单地使用Collections.reverseOrder():

sortedMapDesc = map.entrySet().stream().sorted(Collections.reverseOrder(Map.Entry.comparingByKey())).collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue,(e1, e2) -> e1,LinkedHashMap::new));

让我们在控制台上打印sortedMapDesc

{1005=[id=1005, name=Joseph], 1004=[id=1004, name=Peter],
1003=[id=1003, name=Sam], 1002=[id=1002, name=Miranda],1001=[id=1001, name=Kate]}

如我们所见,现在地图按键降序排列。

结论:

在本文中,我们介绍了使用TreeMap,ArrayList或TreeSet对Java HashMap进行排序的各种方法。 我们还介绍了Java 8 Stream API sorted()方法,该方法可以帮助我们按键或值对地图进行排序。

成为第一个发表评论的人。

翻译自: https://www.javacodegeeks.com/2019/03/sorting-hashmap-java.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/342783.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤教育】国家开放大学2018年秋季 0008-22T简明现代汉语 参考试题

编号&#xff1a;0025 座位号&#xff1a; 18-19学年第1学期期末考试 数据结构 试题&#xff08;开卷&#xff09; 一、选择题&#xff1a;&#xff08;每题4分&#xff0c;共20分&#xff09; 1&#xff0e;以下&#xff08; &#xff09;不是队列的基本运算。 A&#xff0e…

RS-232转RS-485/422串口转换器产品介绍

RS-232转RS-485/422串口转换器是一款专为工业自动化通信中&#xff0c;解决RS-232接口信号转换成RS-485/422信号的光电隔离型转换器。那么&#xff0c;对于RS-232转RS-485/422串口转换器的产品性能参数你是否了解呢&#xff1f;接下来就由飞畅科技的小编来为大家详细介绍下吧&a…

【应用】如何更好的简化工业现场采集控制?

案例背景 随着工业4.0的发展&#xff0c;工业自动化程度不断提高。实现工业4.0&#xff0c;需要高度的工业化、自动化基础。工业大数据是未来工业发展的关键。全球各国制造业创新战略的实施基础都是工业大数据的搜集和特征。 业内人士提醒,“工业4.0”的发展是一个长期过程,需要…

【渝粤教育】国家开放大学2018年秋季 0161-22T教师职业道德 参考试题

编号&#xff1a;0177 b 2018-2019年度第一学期期末考试 电机学&#xff08;2&#xff09; 试 题 2019年 1 月 一、填空题&#xff08;每空4分 &#xff0c;共40分&#xff09;1&#xff0e;一台隐极三相同步发电机时空向量中j轴与A轴重合&#xff0c;某瞬间转子基本波励磁磁动…

SFP光模块是什么? SFP光模块的类型及应用介绍!

SFP光模块是SFP封装的热插拔小封装模块&#xff0c;最高速率可达10.3G&#xff0c;接口为LC。SFP光模块主要由激光器构成。SFP分类可分为速率分类、波长分类、模式分类。那么&#xff0c;什么是SFP&#xff1f;SFP光模块的类型及应用有哪些&#xff1f;接下来我们就跟随飞畅科技…

基于Semtech LoRa SX1268 电路设计及PCB布局

目录 产品简述 应用环境 电路设计 产品简述 SX1268是Semtech公司推出的一款远距离、低功耗的sub-GHz无线收发器&#xff0c;支持的工作频段涵盖了150–960MHz。SX1268提供了两种调试方式&#xff0c; LoRa以及传统的(G)FSK&#xff0c;是一款高性能物联网无线收发器&#x…

【渝粤教育】国家开放大学2018年秋季 0273-22T中国现代文学 参考试题

试卷代号&#xff1a;0283 2018-2019年度第1学期期末考试 广告创意与表现&#xff08;二&#xff09;试题&#xff08;闭卷&#xff09; 2019年1月 一、对下列广告作品的创意进行评析。&#xff08;50分&#xff09; &#xff08;请预留500字空格&#xff09; 二、对下列广告…

【渝粤教育】国家开放大学2018年秋季 0508-21T影视特技及后期合成 参考试题

编号&#xff1a;0538 座位号 2018&#xff5e;2019学年度第一学期期末考试 社区护理学&#xff08;开卷&#xff09;试题 2018年11月 单选题&#xff08;10题&#xff0c;每题3分&#xff0c;共30分,请把答案填在下面对应题号的方框里&#xff09; 1.构成社区的最基本要素是 …

CC1101、SI4432、SI4463 相互通信的可能性与得失探讨

目录 射频芯片简介 三种射频芯片相互通信的可能行探究 射频芯片简介 C1101 一款低于1GHz设计旨在用于极低功耗RF应用。其主要针对工业、科研和医疗(ISM)以及短距离无线通信设备(SRD)。CC1101可提供对数据包处理、数据缓冲、突发传输、接收信号强度指示(RSSI)、空闲信道评估…

短款Apache Camel K

您可能已经看到我们在Camel K周围的Apache Camel社区中所做的工作。 Nicola在半年前的博客中介绍了Camel K &#xff0c; 就在几个月前&#xff0c;我们正在讨论一个新项目&#xff0c;该项目可以作为Apache Camel的一部分启动。 一个有可能改变人们处理集成方式的项目。 该项目…

光模块的参数有哪些呢?

在现代信息网络汇总&#xff0c;光纤通信占据着主导地位&#xff0c;随着网络的覆盖越来越广泛和通信容量的不断增加&#xff0c;通信链路的提升也是必然的发展&#xff0c;光模块在光通信网络中实现着光电信号的转换&#xff0c;是光纤通信的主要器件之一。但是&#xff0c;我…

Modbus是什么?与RS485协议区别与联系有哪些

概述 RS485是广泛用于工业实施中的串行数据传输标准。在实现RS485通信时&#xff0c;通常使用Modbus协议。这将RS485与通过以ASCII字符进行传输进行通信的RS232协议区分开来。要使用RS485协议处理设备&#xff0c;了解Modbus非常重要。 内容 什么是RS485通讯&#xff1f; 什…

【渝粤教育】国家开放大学2018年秋季 0653-21T机电控制与可编程控制技术 参考试题

〖ZDA1(D〗 〖ZD)〗〖ZDA2(D〗 试题&#xff08;开卷&#xff09;〖ZD)〗〖ZDA3(D〗 (共6页)〖ZD)〗〖ZDA4(D〗 (共2页)〖ZD)〗〖ZDA8(D〗 2018—2019学年度第一学期期末考试〖ZD)〗〖ZDA9&#xff08;D〗 2019年1月〖ZD)〗 〖MQ(《1BW》D205mm。25mm(0,-38mm)-W〗〖BG&#xf…

布局 线宽 间距 走线 泪滴 过孔 【快速提升PCB板Layout质量的6个细节】

前言 现在很多的PCB Layout工程师都是按照硬件工程师或者PI SI工程师给出的约束规则来完成布局布线的&#xff0c;俗称的“拉线工”。如不想被当做“拉线工”来看待。要具备一定的电路理解能与SI/PI工程师做PI/SI分析的能力。 PCB Layout是一项技术活&#xff0c;也是经验活。学…

工业交换机那么贵,为什么那么多人都在用?

工业交换机具有电信级性能特征&#xff0c;可耐受严苛的工作环境。产品系列丰富&#xff0c;端口配置灵活&#xff0c;可满足各种工业领域的使用需求。假如工业交换机跟普通商用交换机的功能一样&#xff0c;但是普通交换机价格却更便宜&#xff0c;你会怎么选&#xff0c;答案…

21秋期末考试招投标与合同管理10217k2

1、经济合同当事人订立的“保证合同”&#xff0c;其法律形式是&#xff08;&#xff09;&#xff08;2 分&#xff09; A&#xff0e;无条件地必须履行的合同 B&#xff0e;主合同 C&#xff0e;独立合同 D&#xff0e;从合同 2、反索赔是对提出索赔一方的&#xff08; &#…

【亲测】二极管电压测试“跳坑”注意事项——硬件的板载测试验证

硬件的板载测试验证是什么 在电路设计开发中&#xff0c;电路板上的一些基础器件&#xff08;二极管、三极管、磁性器件等&#xff09;在设计初的性能指标是理想的&#xff0c;但最终实际样板调试却发现性能相差甚远。究竟是前端设计环节的问题&#xff0c;还是后期样板调试过程…

java ee基础知识_Java EE:基础知识

java ee基础知识想要了解一些基本原则&#xff0c;即与Java EE相关的技术术语。 对于许多人来说&#xff0c;Java EE / J2EE仍然最多意味着Servlet&#xff0c;JSP或Struts。 没有冒犯或双关语&#xff01; 无论如何&#xff0c;这不是Java EE的“圣经”。 我没有能力写这样的…

【案例】ZigBee无线模块在城市智能照明上的应用

目录 前言 ZigBee技术简介 ZigBee智能照明应用 方案构架 特点 应用总结 前言 我国城市路灯照明大致可分为两大类&#xff1a;传统路灯照明系统和智能路灯照明系统。传统路灯照明采用简单的有线电路控制&#xff0c;其安装困难&#xff0c;维护成本高&#xff0c;耗电量大…

21秋期末考试管理学基础10241k2

1、梅奥在霍桑试验( )阶段认识到组织中存在非正式组织。&#xff08;2 分&#xff09; A&#xff0e;工场照明试验 B&#xff0e;继电器装配室试验 C&#xff0e;大规模访谈 D&#xff0e;接线板接线工作室试验 2、下述对于信息沟通的认识中&#xff0c;哪一条是错误的&#xf…