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

比如参数为 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是数组的实现方式.

最新文章

  1. JS学习:第一周——NO.3面向对象
  2. Spring可以将简单的组件配置
  3. makefile小例子
  4. 2015暑假多校联合---Zero Escape(变化的01背包)
  5. The Brain as a Universal Learning Machine
  6. 安卓dalvik和art区别
  7. [Javascript] Redirect the browser using JavaScript
  8. POJ 3468&lt;线段树,区间add&gt;
  9. java中有符号和无符号数据类型发生转换
  10. Espresso浅析和使用
  11. SpringMVC的各种注解
  12. 使用pdf.js预览实现读取服务器外部文件
  13. .NET Core中延迟单例另一种写法【.NET Core和.NET Framework的beforefieldinit差异】
  14. 使用JWT来实现对API的授权访问
  15. 全系列Unity4.x.x到2017.1.1破解Win&amp;Mac!最新Unity2017.1.1p3&amp;4.7.2f1破解!
  16. 阿里云服务器CentOS7 vsftp安装、设置及后台端口的设置
  17. 《深入理解java虚拟机》 第七章虚拟机类加载机制
  18. 【IAP支付之三】苹果IAP安全支付与防范 receipt收据验证
  19. WorldWind源码剖析系列:四叉树瓦片集合类QuadTileSet
  20. Android -- MediaRecord

热门文章

  1. linux常用命令---终端与目录操作
  2. 万字长文!一次性弄懂 Nginx 处理 HTTP 请求的 11 个阶段
  3. logger日志接口SLF4J
  4. iOS不移除通知也不会崩溃原因
  5. 避免scrollview内部控件输入时被键盘遮挡,监听键盘弹起,配合做滚动
  6. HDU1588
  7. Redis学习笔记(十五)Sentinel(哨兵)(中)
  8. js常用 方法 封装
  9. 使用webstorm 搭建 vue 开发环境
  10. 【JavaScript数据结构系列】07-循环链表CircleLinkedList