使用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是數組的實現方式.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM