java对对象或者map的属性进行排序
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的属性进行排序的更多相关文章
- java 实体对象转Map公共类
java 实体对象转Map公共类 package org.kxtkx.portal.utils; import java.lang.reflect.Field; import java.util.Ha ...
- java将对象转map,map转对象工具类
/** * 将map转换为一个对象 * * @param map * @param beanClass * @return * @throws Exception */ public static O ...
- JAVA中将对象转为Map类型
之前讲过将Map转为JAVA对象的文章,那么问题来了,如果要把JAVA对象转为Map,又该怎么操作呢?这里亲测了2个方法可行,但目前这2个方法都是基于简单JAVA Bean的情况(即Bean中不能嵌套 ...
- Java中将对象转换为Map的方法
将对象转换为Map的方法,代码如下: /** * 将对象转成TreeMap,属性名为key,属性值为value * @param object 对象 * @return * @throws Illeg ...
- 对JavaScript对象数组按指定属性和排序方向进行排序
引子 在以数据为中心的信息系统中,以表格形式展示数据是在常见不过的方式了.对数据进行排序是必不可少的功能.排序可以分为按单个字段排序和按多个字段不同排序方向排序.单字段排序局限性较大,不能满足用户对数 ...
- 对list集合中的对象按照对象的某一属性进行排序
/** * 重新对list中的CmsCyUser对象按照最终的票数进行排序 * @param list */ private void reSort(List list) { Object[ ...
- 根据List中对象的某一属性进行排序
不多说,直接看代码: package test; import java.util.ArrayList; import java.util.Collections; import java.util. ...
- 对List集合中的对象中的某个属性进行排序
今天在项目中遇到的问题,不能在sql中进行order by.所以将数据库中查询出来的集合,在java代码中进行排序 Collections.sort(list, new Comparator<H ...
- list中的对象或者map中的版本号排序 version排序
经常会用到版本号排序,直接把他封装成一个工具用起来比较方便. List<A> aList = new ArrayList<>(); ...aList 赋值 ... Collec ...
随机推荐
- 012 pandas与matplotlib结合制图
这里以后再补充. 1.折线图
- <%= %>、<% %>、<%@ %>和<%# %>的区别
轉至http://blog.csdn.net/wildfeng04/article/details/7290126 <%=%> 里面放的变量名 <% %> 中间一般放函数或者方 ...
- 大家的备忘录——xpage_在同一页面展开文档显示该文档详细信息(可显示处理过的Rich Text)
Xpage大纲: 解析: 1.通过[link2]点击触发jQuery事件来展开[面板:thispanel] 2.[面板:thispanel]写了onClientLoad事件:让thispanel隐藏. ...
- Codeforces 1027D Mouse Hunt (强连通缩点 || DFS+并查集)
<题目链接> 题目大意: 有n个房间,每个房间都会有一只老鼠.处于第i个房间的老鼠可以逃窜到第ai个房间中.现在要清理掉所有的老鼠,而在第i个房间中防止老鼠夹的花费是ci,问你消灭掉所有老 ...
- HDU 1257 最少拦截系统 【贪心】
<题目链接> 题目大意: 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度 ...
- linux 学习笔记三
用户管理篇章 useradd 建立用户 一般用法 #useradd mysql 含义 创建 mysql用户 特殊用户 > #useradd -d /usr/cjh -m cjh 含义 创建 cj ...
- BZOJ3945 : 无聊的邮递员
因为两个人方案的对称性,可以将$k$除以$2$,转化为在$n-1$个间隔中设置若干断点,求第$k$小的增量. 对于选中的相邻的断点$(a,a+1)$和$(b,b+1)$,增量为$|x_a-x_{b+1 ...
- BZOJ4738 : 汽水
二分答案$mid$,若存在一条路径满足$|ave-k|<mid$,则答案至多为$mid-1$. 若$ave\leq k$,则$\sum(w-k)\leq 0$,且$\sum(k-w-mid)&l ...
- C++程序设计方法3:数组下标运算符重载
数组下标运算符重载 函数声明形式 返回类型operator[](参数): 如果返回类型是引用,则数组运算符调用可以出现在等式的左边,接受赋值,即: Obj[index] = value; 如果返回类型 ...
- 2017.07.10【NOIP提高组】模拟赛B组
Summary 今天题目总体不是难,但是分数很低,只有100+10+30,其中第二题还是以前做过的,第一题设计数论,而且以前做过同一个类型的题目,比赛推了很长时间.第三题时以前做过的原题,是贪心没学好 ...