Java 根据 Map 的 key 的 ASCII 码从小到大排序

摘要:
通常使用Treemap importjava.util.Arrays;params=newTreeMap<setData(参数);params.keySet()){s1.append(key).append(“=”).apped(params.get(key)).appent(“&

1.主要有两种方式,第一种使用treemap,第二种使用sort方法对map的key进行排序重组一个新的map 。一般使用treemap 

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class Test3 {
    public static void main(String[] args) {

        // 方式一:TreeMap可以自动排序
        TreeMap<String, Object> params = new TreeMap<String, Object>();
        setData(params);
        
        StringBuilder s1 = new StringBuilder();
        for (String key : params.keySet()) {
            s1.append(key).append("=").append(params.get(key)).append("&");
        }
        s1.deleteCharAt(s1.length() - 1);
        System.out.println(s1);
        
        //方式二:使用HashMap,并使用Arrays.sort排序
        HashMap<String, Object> params2 = new HashMap<String, Object>();
        setData(params2);
        String[] sortedKeys = params2.keySet().toArray(new String[]{});
        Arrays.sort(sortedKeys);// 排序请求参数
        StringBuilder s2 = new StringBuilder();
        for (String key : sortedKeys) {
            s2.append(key).append("=").append(params2.get(key)).append("&");
        }
        s2.deleteCharAt(s2.length() - 1);
        System.out.println(s2);
        
        System.out.println(s1.toString().equals(s2.toString()));
        

    }
    
    private  static void setData(Map<String,Object> params){
        params.put("Nonce", 11886); 
        params.put("Timestamp", 1465185768); 
        params.put("SecretId", "AKIDz8krbsJ5yKBZQpn74WFkmLPx3EXAMPLE");
        params.put("Action", "DescribeInstances"); 
        params.put("Version", "2017-03-12"); 
        params.put("Region", "ap-guangzhou"); 
        params.put("Limit", 20); 
        params.put("Offset", 0); 
        params.put("测试", "测试"); 
    }
}

2.另外 fastjson如果使用1.2.31及以上版本,如果需要转成json时候可以直接在转json的时候排序

Map message = new HashMap();
        message.put("channel_id","1000000xxxxx");
        message.put("request_no", "1705105267714827140");
        message.put("timestamp",new Date().getTime());
        String sign = JSONObject.toJSONString(message, SerializerFeature.MapSortField);

免责声明:文章转载自《Java 根据 Map 的 key 的 ASCII 码从小到大排序》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vim-ctags-taglist-netrw动态将ADOQuery数据移植到ClientDataSet通用函数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Yii2的深入学习--行为Behavior

我们先来看下行为在 Yii2 中的使用,如下内容摘自 Yii2中文文档 行为是 [[yiiaseBehavior]] 或其子类的实例。行为,也称为 mixins,可以无须改变类继承关系即可增强一个已有的 [[yiiaseComponent|组件]] 类功能。当行为附加到组件后,它将“注入”它的方法和属性到组件,然后可以像访问组件内定义的方法和属性一样访问它...

BringToFront

#include "Unit2.h"void __fastcall TForm1::Button1Click(TObject *Sender){  if (!Form2->Visible)  {    Form2->Visible = true;    Form2->BringToFront();  }} 通过 为知笔记 发布...

vue之provide和inject

官方说: 当我们需要从父组件向子组件传递数据时,我们使用 props。想象一下这样的结构:有一些深度嵌套的组件,而深层的子组件只需要父组件的部分内容。在这种情况下,如果仍然将 prop 沿着组件链逐级传递下去 个人理解: 在祖先组件中定义provide(提供)给后代组件的数据或方法,在后代组件中可以通过inject(接受)提供的数据或方法 举个栗子, 想做...

vue中的锚链接跳转问题

一、在vue中的锚链接和普通的html不同 关于vue中的锚链接可以参考vue 中的  scrollBehavior 滚动行为。 在router.js中  const router = new VueRouter({     routes,       mode: 'history',       scrollBehavior(to, fro...

solr的配置文件及其含义

solr与.net系列课程(二)solr的配置文件及其含义        solr与.net系列课程(二)solr的配置文件及其含义        本节内容还是不会涉及到.net与数据库的内容,但是不要着急,这都是学时solr必学要掌握的东西,solr可不是像其他的dll文件一样,只需要引用就能调出方法与数据的,你不配置好是无法使用,前两节主要是起铺垫...

redis基本操作和 过期时间设置以及持久化方案

Redis是NOSQL阵营中的一种数据库,主要用于存储缓存 五大数据类型:字符串(String)、散列(hash)、列表(list)、集合(set)、有序集合(SortedSett 、zset) String:   set key value    键值对存储值 get key      通过键获取值 keys *        查看所有键 incr ke...