在對外對接的時候,通常會碰到簽名方式, 然后簽名的時候,要求按照參數名稱進行排序.
比如參數為 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是數組的實現方式.