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 ...
随机推荐
- httpmodule MVCapplication
转自:http://www.cnblogs.com/fish-li/archive/2011/09/05/2168073.html http://www.cnblogs.com/yplong/p/55 ...
- Linux下C语言进程通讯编程
代码: #include <stdio.h> #include <stdlib.h> #include <sys/shm.h> /*************基本的函 ...
- oracle左连接连表查询
要想把该表的数据全部查出来,必须select中出现该表的字段. SELECT distinct a.ZGSWSKFJ_DM,b.ZGSWJ_DM,b.SSGLY_DM,b.NSRSBH,b.NSRMC ...
- C语言实现链栈
我自己写的代码部分: #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct ...
- TF:Tensorflor之session会话的使用,定义两个矩阵,两种方法输出2个矩阵相乘的结果—Jason niu
import tensorflow as tf matrix1 = tf.constant([[3, 20]]) matrix2 = tf.constant([[6], [100]]) product ...
- pdf文件去掉广告,水印,背景和删除密码方法收藏
对于学习资料中,pdf文件中的出现的频繁的广告内容真的让人看了很烦,怎么删除呢,后来发现有一款工具foxitphantom可以直接删除,具体操作是,先用该软件打开,然后选择Edit->Heade ...
- 005.Ceph文件系统基础使用
一 Ceph文件系统 1.1 概述 CephFS也称ceph文件系统,是一个POSIX兼容的分布式文件系统. 实现ceph文件系统的要求: 需要一个已经正常运行的ceph集群: 至少包含一个ceph元 ...
- eclipse配置tomcat,让java web项目运行起来!
做项目,搞开发.开发环境配置时第一步.只有环境搭好了,以后的事情才能顺利进行! 这不需求来了,负一屏项目有新功能需要添加,临时接手,要进行服务器前端开发.这个项目是以前后台java人员进行开发的.都是 ...
- Python应用【PDF处理-pypdf2】
概述 Python处理PDF文件需要安装相应的库:[PyPDF2]库 使用场景 工作中可能会涉及处理pdf文件,PyPDF2就是这样一个库, 使用它可以轻松的处理 pdf 文件,它提供了读.写.分割. ...
- Shell脚本笔记(九)数组
数组 一)定义 #最常用:小括号加空格: a=( ) #键值对形式: b=([]=x []=men []=z) #定义变量的形式 c[]=; c[]=; c[]= #命令结果作为数组元素 d=($(c ...