zoukankan      html  css  js  c++  java
  • 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签名验证,或者一些加密算法的验证中都需要对数据进行排序。

  • 相关阅读:
    C# Large Files MD5 C# 获取大文件MD5
    C# SmtpClient 发邮件
    Windows Server 2008 R2 install Visual Studio 2015 failed
    C# 下载泛型数据
    SetApartmentState(ApartmentState state).Ensure that your Main function has STAThreadAttribute marked on it. This exception is only raised if a debugger is attached to the process
    ADO.NET
    WPF DataGrid row background converter datagrid 行背景随绑定数据变化,转换器
    C# 截图ScreenCapture,保存
    打印发现function toUpperCase() { [native code] }
    正则匹配test
  • 原文地址:https://www.cnblogs.com/yangzhilong/p/10672218.html
Copyright © 2011-2022 走看看