package util;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry; /***
*
* @author YangChaoJie
*
*/
public class ReqUtil {
/***
* 将请求对象传入,进行对象转Map,排序,进行MD5加密;
*
* @param req
* @return
*/
private static StringBuilder stringBuilder; private static String currTime; /***
* hashCode加密字符串
*
* @return
*/
public static LinkedHashMap<String, Object> ParameToMap(Object reqData) {
stringBuilder = new StringBuilder();
stringBuilder.append("he3yun.com-");
@SuppressWarnings("unchecked")
LinkedHashMap<String, Object> map = ZJ_BeanToMapUtils.toMap(reqData);
List<Map.Entry<String, Object>> list = new ArrayList<Map.Entry<String, Object>>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Object>>() {
public int compare(Entry<String, Object> o1, Entry<String, Object> o2) {
return String.valueOf(o1.getValue()).toLowerCase()
.compareTo(String.valueOf(o2.getValue()).toLowerCase());
}
});
return CheckData(reqData, list);
} /***
* 根据不同的构造方法参数生成对应Map对象,进行加密
*
* @param reqData
* @param list
* @return
*/
private static LinkedHashMap<String, Object> CheckData(Object reqData, List<Map.Entry<String, Object>> list) {
LinkedHashMap<String, Object> dataMap = new LinkedHashMap<String, Object>(); return traverseEntryToMap(reqData, dataMap, list);
} /***
* 提高复用写的方法
*
* @param dataMap
* @param list
* @return
*/ private static LinkedHashMap<String, Object> traverseEntryToMap(Object reqData,
LinkedHashMap<String, Object> dataMap, List<Map.Entry<String, Object>> list) {
for (Entry<String, Object> mapping : list) {
if (mapping.getValue() != null) {
stringBuilder.append(String.valueOf(mapping.getValue()) + "-");
dataMap.put(mapping.getKey(), mapping.getValue());
}
}
getCurrTime();
stringBuilder.append(currTime); dataMap.put("hashCode", MD5Util.stringToMD5(String.valueOf(stringBuilder)));
dataMap.put("timestamp", currTime); return dataMap;
} public static void getCurrTime() {
currTime = String.valueOf(new Date().getTime());
} /**
* MAP排序
* @param map
*/
public static LinkedHashMap<String, Object> sortMap(LinkedHashMap<String, Object> map) {
List<Map.Entry<String, Object>> list = new ArrayList<Map.Entry<String, Object>>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Object>>() {
public int compare(Entry<String, Object> o1, Entry<String, Object> o2) {
return String.valueOf(o1.getValue()).toLowerCase()
.compareTo(String.valueOf(o2.getValue()).toLowerCase());
}
});
return map;
} }

反射对象生成没有null的map:

public static <K, V> LinkedHashMap<K, V> toMap(Object javaBean) {
LinkedHashMap<K, V> ret = new LinkedHashMap<K, V>();
try {
Method[] methods = javaBean.getClass().getDeclaredMethods();
for (Method method : methods) {
if (method.getName().startsWith("get")) {
String field = method.getName();
field = field.substring(field.indexOf("get") + 3);
field = field.toLowerCase().charAt(0) + field.substring(1);
Object value = method.invoke(javaBean, (Object[]) null);
ret.put((K) field, (V) (null == value ? null : value));
}
}
} catch (Exception e) {
}
return ret;
}

Java | Map排序,工具类改进的更多相关文章

  1. Java基础 @org.junit.Test-单元测试方法 + 操纵Collection和Map的工具类 : Collections 的sort/binarySearch/max/min等静态方法

      单元测试代码:  ( 在IDEA中先输入'@Test '然后根据提示进行自动修订即可!!运行时直接运行即可! 若有多个单元测试块的时候,直接把鼠标放在哪里就自动在哪里运行那个单元块) import ...

  2. Java集合——Collections工具类

    Java集合——Collections工具类 摘要:本文主要学习了Collections工具类的常用方法. 概述 Collections工具类主要用来操作集合类,比如List和Set. 常用操作 排序 ...

  3. JavaSE-基础语法(二)-系统类(java.lang.*)和工具类(java.util.*)

    系统类(java.lang.*)和工具类(java.util.*) 一.系统类(java.lang.*) 这个包下包含java语言的核心类,如String.Math.System和Thread类等,使 ...

  4. java 解析excel工具类

      java 解析excel工具类 CreateTime--2018年3月5日16:48:08 Author:Marydon ReadExcelUtils.java import java.io.Fi ...

  5. UrlUtils工具类,Java URL工具类,Java URL链接工具类

    UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...

  6. Java基础-DButils工具类(QueryRunner)详解

    Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ...

  7. Java 序列化对象工具类

    SerializationUtils.java package javax.utils; import java.io.ByteArrayInputStream; import java.io.Byt ...

  8. 小米开源文件管理器MiCodeFileExplorer-源码研究(8)-文件排序工具类FileSortHelper

    FileSortHelper的核心功能就是,对文件集合FileInfo排序.FileInfo有若干字段,根据字段定义了4种比较器Comparator.调用示例:Collections.sort(Lis ...

  9. HttpTool.java(在java tool util工具类中已存在) 暂保留

    HttpTool.java 该类为java源生态的http 请求工具,不依赖第三方jar包 ,即插即用. package kingtool; import java.io.BufferedReader ...

  10. java文件处理工具类

    import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedRead ...

随机推荐

  1. .NET开发框架(五)-IIS上部署ASP.NET Core项目教程

    系列教程:从初学者到架构师的一步步蜕变 本篇经验将和大家介绍如何在IIS上部署ASP.NET Core项目,希望对初学.NET CORE的童靴入门有所帮助! 1.打开VS,创建项目,选择ASP.NET ...

  2. 设计模式-享元模式(Flyweight)

    享元模式是构造型模式之一,它通过与其他类似对象共享数据来减少内存占用 角色和职责: 1.抽象享元角色()-Person:   享元角色的公共接口 2.具体享元角色()-Teacher: 抽象享元角色的 ...

  3. Windows和linux环境下按文件名和字符串搜索命令

    Windows 1.遍历C盘下所有txt 命令:for /r c:\ %i in (*.txt) do @echo %i 注释:for 循环的意思 /r 按照路径搜索 c:\ 路径 %i in   ( ...

  4. Codeforces 778A:String Game(二分暴力)

    http://codeforces.com/problemset/problem/778/A 题意:给出字符串s和字符串p,还有n个位置,每一个位置代表删除s串中的第i个字符,问最多可以删除多少个字符 ...

  5. .Net 通过设置Access-Control-Allow-Origin来实现跨域访问

    目录 # 前言 # 为每个API接口单独添加响应头 1.针对 ASP.NET MVC 项目的Controllers 2.针对 ASP.NET Web API项目的Controllers 3.针对ASP ...

  6. c++ 逆序对

    c++ 求逆序对 例如数组(3,1,4,5,2)的逆序对有(3,1)(3,2)(4,2)(5,2)共4个 逆序对就是左边的元素比右边的大,那么左边的元素和右边的元素就能产生逆序对 代码跟归并排序差不多 ...

  7. 广告过滤器 Adguard Pre v6.4.1814 Lite V2 简约绿色版

    下载地址:点我 基本介绍 当你在浏览网页的时候总是弹出广告是不是非常的不爽,小编为伙伴们提供了Adguard Pre简约绿色版,一款专业的广告过滤器.Adguard Pre简约绿色版可以帮助伙伴们完美 ...

  8. extern和static区别

    1. 声明和定义 ​ 当定义一个变量的时候,就包含了对该变量声明的过程,同时在内存张申请了一块内存空间.如果在多个文件中使用相同的变量,为了避免重复定义,就必须将声明和定义分离开来.定义是创建与名字关 ...

  9. python函数知识一 函数初始、定义与调用、返回值、参数和函数的好处+菜中菜

    第四章 函数 1.函数初识: def :关键字 -- 定义 函数名:和变量的定义方式一样 (): 用于参数传递,: 形参:函数的定义中()内的是形参 实参:调用的()内是实参 传参:调用时将实参传递给 ...

  10. CF510C Fox And Names——拓扑排序练习

    省委代码: #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> # ...