最近开发微信和支付宝的服务端支付,涉及到字典的排序和 url 参数转换成字典的操作,整理了一个工具类:

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.HashMap;

import java.util.Iterator;

import java.util.LinkedHashMap;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;

import java.util.TreeMap;

public class MapUtil {

/**

* Map 按 key 进行排序

*

* @param map

* @return

*/

public static Map < String,

String > sortMapByKey(Map < String, String > map) {

if (map == null || map.isEmpty()) {

return null;

}

Map < String,

String > sortMap = new TreeMap < String,

String > (new MapKeyComparator());

sortMap.putAll(map);

return sortMap;

}

/**

* Map 按 value 进行排序

*

* @param map

* @return

*/

public static Map < String,

String > sortMapByValue(Map < String, String > oriMap) {

if (oriMap == null || oriMap.isEmpty()) {

return null;

}

Map < String,

String > sortedMap = new LinkedHashMap < String,

String > ();

List < Map.Entry < String,

String >> entryList = new ArrayList < Map.Entry < String,

String >> (oriMap.entrySet());

Collections.sort(entryList, new MapValueComparator());

Iterator < Map.Entry < String,

String >> iter = entryList.iterator();

Map.Entry < String,

String > tmpEntry = null;

while (iter.hasNext()) {

tmpEntry = iter.next();

sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue());

}

return sortedMap;

}

/**

* 将 Url Params String 转为 Map

*

* @param param

* aa=11&bb=22&cc=33

* @return map

*/

public static Map < String,

Object > urlParams2Map(String param) {

Map < String,

Object > map = new HashMap < String,

Object > ();

if ("".equals(param) || null == param) {

return map;

}

String[] params = param.split("&");

for (int i = 0; i < params.length; i++) {

String[] p = params[i].split("=");

if (p.length == 2) {

map.put(p[0], p[1]);

}

}

return map;

}

/**

* 将 map 转为 Url Params String

*

* @param map

* @return aa=11&bb=22&cc=33

*/

public static String map2UrlParams(Map < String, String > map, boolean isSort) {

if (map == null) {

return "";

}

StringBuffer sb = new StringBuffer();

List < String > keys = new ArrayList < String > (map.keySet());

if (isSort) {

Collections.sort(keys);

}

for (int i = 0; i < keys.size(); i++) {

String key = keys.get(i);

String value = map.get(key).toString();

sb.append(key + "=" + value);

sb.append("&");

}

String s = sb.toString();

if (s.endsWith("&")) {

s = s.substring(0, s.lastIndexOf("&"));

}

return s;

}

}

class MapKeyComparator implements Comparator < String > {

@Override

public int compare(String str1, String str2) {

return str1.compareTo(str2);

}

}

class MapValueComparator implements Comparator < Map.Entry < String, String >> {

@Override

public int compare(Entry < String, String > me1, Entry < String, String > me2) {

return me1.getValue().compareTo(me2.getValue());

}

}

另外按 map 的 key ascii 码升序排列,还有一个更简单的办法,如下面的语句:

SortedMap smap = new TreeMap(map);

注意 map 是现成无序的字典,依赖 SortedMap和 TreeMap 转换就可以搞定了,很简单。

java map key 升序_Java Map 按 key 升序排序相关推荐

  1. java map null吗_Java: Map里面的键和值可以为空吗?

    在Java中,Map里面的键和值可以为空吗?我们先来看一个例子: private static void TestHashMap() { // TODO Auto-generated method s ...

  2. java map遍历删除_Java Map在遍历过程中删除元素

    map遍历判断筛选删除时 如果对map使用put.remove或clear方法(例如map.remove直接删除),那么迭代器就不再合法(并且在其后使用该迭代器将会有ConcurrentModific ...

  3. java两map取交集_Java Map 求交集 并集 差集

    import com.google.common.collect.MapDifference; import com.google.common.collect.Maps; import java.u ...

  4. java从map取值_java map中怎么通过键取出值?

    展开全部 在java map中取出键值有以32313133353236313431303231363533e59b9ee7ad9431333363396464下两种方法: 1.第一种方法根据键值的名字 ...

  5. java map的应用_JAVA map的简单应用

    第一次写内容,比较简单希望大家见谅. 相信很多新码农都会使用if判断,通过验证if 进而继续编写业务流程,但是有的时候if也并不是很好用.比如,判定条件有许多的时候.下面举个例子. 联调webserv ...

  6. java web 树形管理_java web 后台树形菜单排序

    1.需求场景 数据库后台返回树形结构菜单,实现菜单排序. 2.项目环境 spring spring mvc mybatis  mysql 3.实现方法 对应的实体类 private int id;// ...

  7. Java语言之数组_java语言之数组-----选择排序

    1. 数组的基本知识:数组是用来存储变量的集合 2. 数组的声明格式:元素类型 [] 数组引用变量名 = new 元素类型[元素个数] 如: int [] arrary = new int [10] ...

  8. Java将map置空_Java实现过滤掉map集合中key或value为空的值示例

    Java实现过滤掉map集合中key或value为空的值示例 发布时间:2020-09-16 23:26:14 来源:脚本之家 阅读:147 作者:May的博客 本文实例讲述了Java实现过滤掉map ...

  9. java map 允许重复_java中key值可以重复的map:IdentityHashMap

    在Java中,有一种key值可以重复的map,就是IdentityHashMap.在IdentityHashMap中,判断两个键值k1和 k2相等的条件是 k1 == k2 .在正常的Map 实现(如 ...

最新文章

  1. 【深度学习】(7) 交叉验证、正则化,自定义网络案例:图片分类,附python完整代码
  2. Hadoop集群搭建(一:集群安装及网络环境配置)
  3. windows 7作为微软对抗Google的秘密武器
  4. 请列举你了解的分布式锁_面试官想要你回答的分布式锁实现原理
  5. Google Protocol Buffer 简单介绍
  6. boost::assertion_failed_msg相关的测试程序
  7. js操作完的数值赋回html元素,JS的学习
  8. VS 2005 或 VS 2008 在安装VSS 2005后,看不到源代码管理的解决办法
  9. 凯恩帝k1000ti参数设置_KND1000TI系统参数
  10. c++ 按行读取txt文件并赋值_python操作txt文件中数据教程[3]python读取文件夹中所有txt文件并将数据转为csv文件...
  11. 极限运动:街头极限单车,不只是牛逼!
  12. 电脑如何进行长截图?
  13. 让你从入门到精通CASS软件教程免费下载
  14. 【吐血整理】数据库的安全性
  15. python图片截取斜四边形_opencv 截取任意四边形区域的图像
  16. 至少144只独角兽在等着IPO,数据不好,PE 给的估值可能保不住了
  17. c++刷题(3/100)数独,栈和队列
  18. 黄哥python培训怎样
  19. RNA 12. SCI 文章中肿瘤免疫浸润计算方法之 CIBERSORT
  20. Java实现常见排序算法

热门文章

  1. 色差信号与RGB信号
  2. NG Toolset开发笔记--5GNR Resource Grid(11)
  3. 5GNR UpLink子载波选择后补偿问题
  4. ABB机器人调试........
  5. 2011年5月25日
  6. 使用Apriori进行关联分析
  7. 2021年高压电工考试及高压电工考试题库
  8. 前端开发UI框架选择---帮你解决忧愁
  9. timezoneinfo移植
  10. 3D游戏建模要学好哪些软件