package com.xkj.spider.mpb.util;

import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap; import lombok.extern.slf4j.Slf4j; /**
* 对属性进行排序得一个排序后的属性字符串
* @author yangzl
* @data 2019年4月4日
*
*/
@Slf4j
public class SortPropertiesUtils {
public static final String PARAM_EQUAL = "=";
public static final String PARAM_AND = "&"; private SortPropertiesUtils() {} /**
* 对Object进行List<NameValuePair>转换后按key进行升序排序,以key=value&...形式返回
*
* @param list
* @return
*/
public static String sort(Object order) {
Map<String, Object> map = bean2Parameters(order);
return sort(map);
} /**
* 对对Object转换后, 以key=value&...形式返回按key进行升序排序,以key=value&...形式返回
*
* @param order
* @return
*/
public static String sort(Map<String, Object> order) {
if (null == order || order.isEmpty()) {
return null;
} Map<String, Object> parameters = new TreeMap<>((obj1, obj2) -> obj1.compareToIgnoreCase(obj2));
parameters.putAll(order); StringBuilder sb = new StringBuilder();
for (Map.Entry<String, Object> entry : parameters.entrySet()) {
if (null != entry.getValue()) {
sb.append(entry.getKey());
sb.append(PARAM_EQUAL);
sb.append(entry.getValue().toString());
sb.append(PARAM_AND);
}
} String params = sb.toString();
if (sb.toString().endsWith(PARAM_AND)) {
params = sb.substring(0, sb.length() - 1);
}
return params;
} /**
* 将bean转换成键值对列表
*
* @param bean
* @return
*/
private static Map<String, Object> bean2Parameters(Object bean) {
if (bean == null) {
return null;
} Map<String, Object> parameters = new HashMap<>(); if (null != parameters) {
// 取得bean所有public 方法
Method[] Methods = bean.getClass().getMethods();
for (Method method : Methods) {
if (method != null && method.getName().startsWith("get") && !method.getName().startsWith("getClass")) {
// 得到属性的类名
Object value = null;
// 得到属性值
try {
value = method.invoke(bean);
if (null != value) {
// 添加参数
// 将方法名称转化为id,去除get,将方法首字母改为小写
String param = method.getName().replaceFirst("get", "");
if (param.length() > 0) {
String first = String.valueOf(param.charAt(0)).toLowerCase();
param = first + param.substring(1);
}
parameters.put(param, value);
}
} catch (Exception e) {
log.error("", e.getMessage(), e);
}
}
}
} return parameters;
}
}

在大部分有md5签名验证,或者一些加密算法的验证中都需要对数据进行排序。

java对对象或者map的属性进行排序的更多相关文章

  1. java 实体对象转Map公共类

    java 实体对象转Map公共类 package org.kxtkx.portal.utils; import java.lang.reflect.Field; import java.util.Ha ...

  2. java将对象转map,map转对象工具类

    /** * 将map转换为一个对象 * * @param map * @param beanClass * @return * @throws Exception */ public static O ...

  3. JAVA中将对象转为Map类型

    之前讲过将Map转为JAVA对象的文章,那么问题来了,如果要把JAVA对象转为Map,又该怎么操作呢?这里亲测了2个方法可行,但目前这2个方法都是基于简单JAVA Bean的情况(即Bean中不能嵌套 ...

  4. Java中将对象转换为Map的方法

    将对象转换为Map的方法,代码如下: /** * 将对象转成TreeMap,属性名为key,属性值为value * @param object 对象 * @return * @throws Illeg ...

  5. 对JavaScript对象数组按指定属性和排序方向进行排序

    引子 在以数据为中心的信息系统中,以表格形式展示数据是在常见不过的方式了.对数据进行排序是必不可少的功能.排序可以分为按单个字段排序和按多个字段不同排序方向排序.单字段排序局限性较大,不能满足用户对数 ...

  6. 对list集合中的对象按照对象的某一属性进行排序

    /**  * 重新对list中的CmsCyUser对象按照最终的票数进行排序  * @param list  */ private void reSort(List list) {   Object[ ...

  7. 根据List中对象的某一属性进行排序

    不多说,直接看代码: package test; import java.util.ArrayList; import java.util.Collections; import java.util. ...

  8. 对List集合中的对象中的某个属性进行排序

    今天在项目中遇到的问题,不能在sql中进行order by.所以将数据库中查询出来的集合,在java代码中进行排序 Collections.sort(list, new Comparator<H ...

  9. list中的对象或者map中的版本号排序 version排序

    经常会用到版本号排序,直接把他封装成一个工具用起来比较方便. List<A> aList = new ArrayList<>(); ...aList 赋值 ... Collec ...

随机推荐

  1. python自带进程池

    注意:必须加 close() 和 join(),且 close 必须在 join 之前 代码: import multiprocessing #执行方法 def func(*args,**kwargs ...

  2. Codeforces 992C Nastya and a Wardrobe (思维)

    <题目链接> 题目大意: 你开始有X个裙子 你有K+1次增长机会 前K次会100%的增长一倍 但是增长后有50%的机会会减少一个 给你X,K(0<=X,K<=1e18), 问你 ...

  3. checkbox jquery操作总结

    $('input[name="myCheckbox"]').prop('checked','true'); // 全选 $('input[name="myCheckbox ...

  4. 【ABP】ABP跨域调用API时出现的问题

    public override void Initialize() { IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAss ...

  5. Alpha(6/10)

    鐵鍋燉腯鱻 项目:小鱼记账 团队成员 项目燃尽图 冲刺情况描述 站立式会议照片 各成员情况 团队成员 学号 姓名 git地址 博客地址 031602240 许郁杨 (组长) https://githu ...

  6. 在Xamarin.iOS项目中使用预设数据库

    在Xamarin.iOS项目中使用预设数据库 当开发者准备好一个预设数据库文件后,就可以将这个数据库文件添加到创建的项目中了.本节将分别在Xamarin.iOS和Xamarin.Android项目中使 ...

  7. [C程序设计基础]快速排序

    //从大到小排序 ///三个参数 a要排序的 数组, l扫左边的 r扫右边 void quickSort(int a[],int l, int r){ /// 左边要小于 右边才有意义 if (l & ...

  8. It is not safe to rely on the system's timezone settings错误

    在写php程序中有时会出现这样的警告: PHP Warning: date(): It is not safe to rely on the system's timezone settings. Y ...

  9. 用canvas写个接水管小游戏

    声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! 过年的十八天假期迷迷糊糊一下子就过去了(LZ还是实习生,鉴于大学最后一个寒假了,所以就多请了好多天假),又要返工上班了.这是年后的第一篇博 ...

  10. BZOJ4479 : [Jsoi2013]吃货jyy

    若$k\leq 15$,那么可以设$d[i][S]$表示经过了$S$集合的边,现在位于$i$点的最短路. 可以用Dijkstra算法在$O(n^22^k)$时间内求出. 否则若$k>15$,那么 ...