Java对Map集合进行排序

实现 Comparator 接口,重写compare方法,完成自定义排序

int compare(Object o1, Object o2) 返回一个基本类型的整型

如果要按照升序排序,则o1 小于o2,返回-1(负数),相等返回0,01大于02返回1(正数)

如果要按照降序排序,则o1 小于o2,返回1(正数),相等返回0,01大于02返回-1(负数)

使用示例如下:

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;

public class MapSort {

public static void main(String[] args) {

sortMap();//测试Map排序

}

public static Map sortMap(){

Map map = new HashMap();

map.put("100M",(double) 100);

map.put("10M",(double) 10);

map.put("1000G",(double) 1000000);

map.put("10G",(double) 10000);

map.put("100T",(double) 100000000);

map.put("10T",(double) 10000000);

map.put("1T",(double) 1000000);

//将map添加到list

List> list = new ArrayList>(map.entrySet());

System.out.println("排序前:"+list);

Collections.sort(list,new Comparator>() {

//从大到小

@Override

public int compare(Entry o1, Entry o2) {

if(o1.getValue()>o2.getValue()){

return -1;

}else if(o1.getValue().equals(o2.getValue())){

String str1 = o1.getKey().substring(o1.getKey().length()-1, o1.getKey().length());

String str2 = o2.getKey().substring(o2.getKey().length()-1, o2.getKey().length());

//因为定义的是Double包装类型,在比较的时候需要用 equals才能判断相等,使用==比较的是对象的地址

if(str1.equals(str2)){

return 0;

//数值相同时,比较的是单位,单位从大到小排序 T>G>M

}else if((str1.equals("T") && str2.equals("G")) ||( str1.equals("T") && str2.equals("M") )||( str1.equals("G") && str2.equals("M"))){

return -1;

}else{

return 1;

}

}else{

return 1;

}

}

});

System.out.println("排序后(从大到小):"+list);

return map;

}

}

执行结果:

排序前:[1000G=1000000.0, 1T=1000000.0, 100T=1.0E8, 10T=1.0E7, 10G=10000.0, 100M=100.0, 10M=10.0]

排序后(从大到小):[100T=1.0E8, 10T=1.0E7, 1T=1000000.0, 1000G=1000000.0, 10G=10000.0, 100M=100.0, 10M=10.0]

原文:https://www.cnblogs.com/DFX339/p/12449970.html

java map集合排序的_Java对Map集合进行排序相关推荐

  1. java中两种遍历集合的方式_Java中Map集合的两种遍历方式

    Java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下Java中Map集合的两种遍历方式! 关于遍历Map集合的几 ...

  2. java中map怎么取值_java中map的取值

    package com.itcast.map; import java.util.HashMap; import java.util.Map; import java.util.Set; import ...

  3. java set循环取值_Java遍历Map和遍历Set

    Java遍历Map public static void main(String[] args) { Map map = new HashMap(); map.put("1", & ...

  4. java list 时间排序吗_java中的list时间排序

    最初设想使用:时间long型 private void testTimes() throws InterruptedException{ Calendar cal=Calendar.getInstan ...

  5. java 集合操作工具包_java之操作集合的工具类--Collections

    Collections是一个操作Set.List和Map等集合的工具类. Collections中提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了对集合对象设置不可变.对集合对象实现同步控 ...

  6. java最全基础知识_Java编程入门,计数排序(Counting Sort)怎么做?

    计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中. 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数. 计数排序(Counting sort)是一种稳定的排 ...

  7. java array 元素的位置_java中的两种排序工具Arrays和Collections的使用

    java中的排序工具主要是有两个Arrays和Collections.我们一个一个来讲解. 本来写好了每一种方法的测试代码,后来又给删了,因为我觉得如果想要去了解的话,可以直接查看这些常用的即可.因为 ...

  8. java最全基础知识_Java编程入门,选择排序(Selection Sort)怎么做?

    表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好.唯一的好处可能就是不占用额外的内存空间了吧.理论上讲,选择排序可能也是平时排序一般人想到的 ...

  9. java 集合 总结 表_java 列表与集合总结

    列表与集合 (一切输出都用for each!丢弃迭代器) 列表List 1顺序表 Arraylist  适用于静态查找 2   链式双向表 Linkedlist 适用于增删该查 3 (容器) Vect ...

最新文章

  1. matlab直方图绘制
  2. ArcGIS Desktop 9.3.1安装流程
  3. java mvc 菜鸟_Spring MVC 简单入门
  4. 大四阶段的社会实践的主要目的是_大四寒假社会实践报告1500字范文
  5. 分享一个.NET(C#)按指定字母个数截断英文字符串的方法–提供枚举选项,可保留完整单词...
  6. 实战HTML:静态登录界面
  7. linux 测试post接口
  8. MySQL实现跨库join查询
  9. 痞子衡嵌入式:开启NXP-MCUBootUtility工具的HAB签名功能 - CST(中英双语)
  10. 仿照vue实现双向数据绑定兼容IE6
  11. easyExcel的一些操作
  12. 给hexo搭建的博客更换主题
  13. php户型图识别,户型图上的那些标注都是啥?看不懂难怪被坑
  14. 印章与印鉴的区别_篆刻与印章有区别
  15. 解决Hander dispatch failed;nested exception is java .lang. AbstractMethodError:Method com/mchange/v2/c
  16. 视频和语音播放(进行中)
  17. 中秋节静态HTML网页作业作品 大学生中秋网页设计制作成品 简单DIV CSS布局网站
  18. 动态规划——股票问题
  19. 华为郑叶来:AI炒作和投机回落,是行业应用春天的开始...
  20. 化工原理物性参数_化工原理课程设计全套(包括图纸)

热门文章

  1. 帧大小超过交换机mtu_交换机的三种交换方式
  2. 量化信噪比 非均匀量化_达尔优EM910牧马人轻量化游戏鼠标拆解评测
  3. 【youcans 的 OpenCV 例程200篇】125. 形态算法之提取连通分量
  4. 我的Go+语言初体验——(3)Go+ 语言数据类型
  5. java容易掉发吗_容易被忽略的面试题—Java高并发
  6. mysql 修改数据库的数据库_如何更改MySQL数据库的数据库名
  7. Python random模块seed理解
  8. 【Python】Windows下Python3虚拟环境搭建
  9. 用IntelliJ IDEA 配置安卓(Android)开发环境(一条龙服务,新手进!)
  10. python面向对象基础之类与实例