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. python函数之 range()

      Python range() 函数用法 python range() 函数可创建一个整数列表,一般用在 for 循环中. 函数语法 range(start, stop[, step]) 参数说明: ...

  2. 分析了16年的福利彩票记录,原来可以用Python这么买彩票

    目录 0 引言 1 环境 2 需求分析 3 代码实现 4 后记 0 引言 上周被一则新闻震惊到了,<2454万元大奖无人认领!福彩史上第二大弃奖在广东中山产生 >,在2019年5月2日开奖 ...

  3. 字符串匹配问题(暴力,kmp)

    对于字符串的匹配问题,现在自己能够掌握的就只有两种方法, 第一种就是我们常用的暴力匹配法,那什么是暴力匹配法呢? 假设我们现在有一个文本串和一个模式串,我们现在要找出模式串在文本串的哪个位置. 文本串 ...

  4. 基于C#的机器学习--深层信念网络

    我们都听说过深度学习,但是有多少人知道深度信念网络是什么?让我们从本章开始回答这个问题.深度信念网络是一种非常先进的机器学习形式,其意义正在迅速演变.作为一名机器学习开发人员,对这个概念有一定的了解是 ...

  5. 2050编程赛 冰水挑战 HDU 6495

    题目地址:https://vjudge.net/problem/HDU-6495 思路:我们需要维护的是挑战了n个之后剩余体力值,剩余体力值越大越好dp[N(i)][N(j)],第一个维度,记录当前是 ...

  6. python3+pyQt5+QtDesignner实现窗口化猜数字游戏

    描述:使用QtDesignner设计界面,pyQt5+python3实现主体方法制作的猜数字游戏. 游戏规则:先选择游戏等级:初级.中级.高级.魔鬼级,选择完游戏等级后点击“确定”,然后后台会自动生成 ...

  7. Protocol Buffer使用转换工具将proto文件转换成Java文件流程及使用

    Client与Server的网络通信协议传输使用google protobuf,服务器端使用的是Java 一. Protocol Buffersprotobuf全称Google Protocol Bu ...

  8. VM虚拟机 VMWare Workstation Pro v15.0.1 中文破解版

    虚拟机软件VMware Workstation Pro 15.0 全新版本发布,此次更新了诸多客户机操作系统版本,另外完全兼容Win10创意者更新支持.12.0之后属于大型更新,专门为Win10的安装 ...

  9. NetCore 获取appsetting.json 文件中的配置

    1. using Microsoft.Extensions.Configuration public class HomeController : Controller { public IConfi ...

  10. SpringCloud解析之Zuul(一)

    本文基于Spring Cloud Edgware.SR6,Zuul版本1.3.1,解析Zuul的请求拦截机制,让大家对Zuul的原理有个大概的认识和了解.如有不对的地方,欢迎指正. spring bo ...