• 使用jdk1.8 stream特性对参数名称进行排序


    在对外对接的时候,通常会碰到签名方式, 然后签名的时候,要求按照参数名称进行排序.

    比如参数为 c=22&a=1, 需要将结果排序为a=1&c=22, 然后再进行别的运算.

    可以使用jdk1.8特性stram进行操作, 参考如下语句: 

    String param = "x=4&a=&ca=2&acb=3&sign=xxx";
    Object result = sortParamByKey(param.split("&"));
    public static String sortParamByKey(String[] param) {
            if(param != null) {
                List<String> params = Arrays.asList(param);
                String result = params.stream()        
                .collect(Collectors.toMap(v->v.split("=")[0],v->v.substring(v.indexOf("=")+1)))
                .entrySet().stream()
                .filter(e->!(e.getValue()==null || "".equals(e.getValue())))
                .filter(e->!"sign".equalsIgnoreCase(e.getKey()))//sign为key的时候,去除
                .sorted(Map.Entry.comparingByKey())
                .map(e->new StringBuilder(e.getKey()).append("=").append(e.getValue()))
                .collect(Collectors.joining("&"))
                ;
                return result;
            }
            return null;
        }

    tips: 可以针对Request进行进一步封装, 另外上面这个代码当参数名称重复的时候,会去除一个参数. 因为代码将list转map了. 所以可以考虑直接传map.value是数组的实现方式.

  • 相关阅读:
    ssh事务配置
    使用注解实现事务处理
    c3p0、dbcp<转>
    添加业务层和事务机制
    使用spring集成hibernate
    使用Adivisor配置增强处理
    aop注解
    Spring IoC实现解耦合
    python console的命令执行
    python格式化输出
  • 原文地址:https://www.cnblogs.com/zkongbai/p/13093672.html
Copyright © 2020-2023  润新知