Java 按字典顺序排序请求参数

Java 大约 1835 字

方式一(推荐)

Java8

Map<String, String> map = new TreeMap<>();
map.put("xxx", "你好");
map.put("aaa", "hell world");
String str = map.entrySet().stream().map(entry -> entry.getKey() + "=" + entry.getValue()).collect(Collectors.joining("&"));
System.out.println(str);

方式二

public static String formatUrlMap(Map<String, String> paraMap, boolean urlEncode, boolean keyToLower) {
    String buff;
    try {
        List<Map.Entry<String, String>> infoIds = new ArrayList<>(paraMap.entrySet());
        // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)
        Collections.sort(infoIds, new Comparator<Map.Entry<String, String>>() {

            @Override
            public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
                return (o1.getKey()).compareTo(o2.getKey());
            }
        });

        // 构造URL 键值对的格式
        StringBuilder buf = new StringBuilder();
        for (Map.Entry<String, String> item : infoIds) {
            if (!"".equals(item.getKey())) {
                String key = item.getKey();
                String val = item.getValue();
                if (urlEncode) {
                    val = URLEncoder.encode(val, "utf-8");
                }
                if (keyToLower) {
                    buf.append(key.toLowerCase()).append("=").append(val);
                } else {
                    buf.append(key).append("=").append(val);
                }
                buf.append("&");
            }
        }
        if (buf.length() > 0) {
            buf.deleteCharAt(buf.length() - 1);
        }

        buff = buf.toString();
//         if (!buff.isEmpty()) {
//            buff = buff.substring(0, buff.length() - 1);
//        }
    } catch (Exception e) {
        return null;
    }
    return buff;
}
阅读 2698 · 发布于 2019-04-08

————        END        ————

扫描下方二维码关注公众号和小程序↓↓↓

扫描二维码关注我
昵称:
随便看看 换一批