使用jdk1.8 stream特性对参数名称进行排序
Posted zkongbai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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是数组的实现方式.
以上是关于使用jdk1.8 stream特性对参数名称进行排序的主要内容,如果未能解决你的问题,请参考以下文章