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. MapReduce in MongoDB

    MongoDB の MapReduce 在Hadoop的学习中已经接触过MapReduce了,它是一个很成熟的计算模型,将大批量的工作(也就是数据)分解(MAP映射)执行,最后将结果合并成最终的Red ...

  2. Unity3D热更新之LuaFramework篇[06]--Lua中是怎么实现脚本生命周期的

    前言 用c#开发的时候,新建的脚本都默认继承自Monobehaviour, 因此脚本才有了自己的生命周期函数,如Awake,Start, Update, OnDestroy等. 在相应的方法中实现游戏 ...

  3. yarn or npm 版本固化如何选择

    前言 作为前端开发者,npm这个包管理工具的重要性显而易见.优点不再表述,但一些缺点是为使用者诟病比较多的:速度慢.版本控制.下面主要讨论下npm的版本固化问题,即lock文件. npm语义化版本管理 ...

  4. WordPress教程之初识WordPress

    你是否梦想过以极低的成本获得一个漂亮的网站,而无需聘请专业的开发和设计人员,也不必学习任何编程知识,并且网站功能可以无限扩展?对这些问题中的任何一个,如果你的答案是肯定的,那么 WordPress 将 ...

  5. VueRouter认识

    1. 什么是路由? 路由(vue-router)是负责将进入的浏览器请求映射到特定的 组件 代码中.即决定了由谁(组件)去响应客户端请求.简单说路由就是url地址和对应的资源的映射,通过一个路径的ur ...

  6. web前端css(一)

    一  css的引入方式: 1)    行内样式:     <p style=”color: green”>我是一个段落</p> 2)    内接样式: <style ty ...

  7. C++模版的用法

    模板是实现代码重用机制的一种工具,实质就是实现类型参数化,即把类型定义为参数. C++提供两种模板:函数模板,类模板 函数模板 template <typename T> T myMax( ...

  8. kuangbin专题 专题二 搜索进阶 Nightmare Ⅱ HDU - 3085

    题目链接:https://vjudge.net/problem/HDU-3085 题意:有两个鬼和两个人和墙,鬼先走,人再走,鬼每走过的地方都会复制一个新鬼, 但新鬼只能等待旧鬼走完一次行程之后,下一 ...

  9. python连接greenplum_postgresql

    1. 场景描述 使用python连接greenplum或者postgresql. 2. 解决方案 2.1 真实代码 2.1.1 调用类 import dbgp as dbgp # 执行 def exe ...

  10. 跟着大彬读源码 - Redis 4 - 服务器的事件驱动有什么含义?(上)

    众所周知,Redis 服务器是一个事件驱动程序.那么事件驱动对于 Redis 而言有什么含义?源码中又是如何实现事件驱动的呢?今天,我们一起来认识下 Redis 服务器的事件驱动. 对于 Redis ...