map和list嵌套数据排序

<p><pre name="code" class="java"><p>最近工作中使用rest接口处理有复杂的父子关系的数据,调用rest接口时需要对所有参数签名,其中一个签名规则就是对所有参数排序,参数都是有父子关系的json字符串,可以用map和list的嵌套,再使用Gson转成有父子关系json字符串。所以对所有参数排序的工作就是对map和list嵌套数据的排序。下面提供两个递归方法实现map和list嵌套数据排序功能,仅供参考。</p><p>排序规则:</p><p>1.map按key的字典升序排序</p><p>2.list按值的字典升序排序</p><p>
</p><p>代码如下:</p>


import java.util.*;public class Test { /** * 对Map按key进行排序,支持map和list混合嵌套 * * @param map * @return */ public static Map<String, Object> sortMapByKey(Map<String, ?> map) { if (map == null || map.isEmpty()) { return null; } Map<String, Object> sortMap = new TreeMap<String, Object>(new MapComparator()); for (Map.Entry<String, ?> entry : map.entrySet()) { if (entry.getValue() instanceof Map) { sortMap.put(entry.getKey(), sortMapByKey((Map) entry.getValue())); continue; } if (entry.getValue() instanceof List) { sortMap.put(entry.getKey(), sortListByValue((List) entry.getValue())); continue; } if (entry.getValue() instanceof String[]) { String[] temp = (String[]) entry.getValue(); sortMap.put(entry.getKey(), sortListByValue(Arrays.asList(temp))); continue; } if (entry.getValue() instanceof String) { sortMap.put(entry.getKey(), entry.getValue()); continue; } if (entry.getValue() instanceof Boolean) { sortMap.put(entry.getKey(), entry.getValue().toString()); continue; } if (entry.getValue() instanceof Number) { sortMap.put(entry.getKey(), entry.getValue()); continue; } } return sortMap; } /** * 对list进行排序,支持map和list混合嵌套 * * @param list * @return */ public static List<Object> sortListByValue(List<?> list) { if (list == null || list.isEmpty()) { return null; } List<Object> sortList = new ArrayList<Object>(); for (Object item : list) { if (item instanceof Map) { sortList.add(sortMapByKey((Map) item)); continue; } if (item instanceof List) { sortList.add(sortListByValue((List) item)); continue; } if (item instanceof String[]) { sortList.add(sortListByValue(Arrays.asList((String[]) item))); continue; } if (item instanceof String) { sortList.add(item); continue; } if (item instanceof Boolean) { sortList.add(item); continue; } if (item instanceof Number) { sortList.add(item); continue; } } Collections.sort(sortList, new MapComparator()); return sortList; } public static final void main(String[] args) throws Exception { HashMap<String, Object> map = new HashMap<String, Object>(); Map<String, Object> children1 = new HashMap<String, Object>(); children1.put("BB", "33"); children1.put("AA", "11"); Map<String, Object> children2 = new HashMap<String, Object>(); children2.put("BB", "11"); children2.put("AA", "44"); List<Map> list = new ArrayList<Map>(); list.add(children1); list.add(children2); map.put("C", list); map.put("A", "1"); map.put("B", "2"); Map temp = sortMapByKey(map); }}//比较器类class MapComparator implements Comparator<Object> { public int compare(Object o1, Object o2) { return o1.toString().compareTo(o2.toString()); }}
 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值