Map之key和value排序

按照value排序,一般排序按照key的话,一般key都是Integer和String,用TreeMap就可以了,另外中方式是把Map按照Map.Entry取出来,放到List里面,然后借助Collectins的sort进行排序。
代码:

/**
 * @author wzx
 * @time 2018/2/9
 */
public class MapSortTest {
    public static void main(String[] args) {
        Pet p1 = new Pet("dog", 2);
        Pet p2 = new Pet("cat", 5);
        Pet p3 = new Pet("pig", 3);
        Pet p4 = new Pet("wolf", 1);
        Map<String, Pet> map = new HashMap<>();
        //Map<String, Pet> map = new TreeMap<String,Pet>();
        map.put("d", p1);
        map.put("c", p2);
        map.put("p", p3);
        map.put("w", p4);
        System.out.println(map);
        map = compareByValue(map);
        System.out.println(map);

        map = compareByKey(map);
        System.out.println(map);

        sortByKey(map);
        sortByKey2(map);
        sortByValue(map);

    }

    /**
     * 基本的value排序方式
     * @param map
     * @return
     */
    public static Map compareByValue(Map map) {
        if (map == null || map.isEmpty()) {
            return null;
        }
        List<Map.Entry<String, Pet>> list = new ArrayList<Map.Entry<String, Pet>>(map.entrySet());
        Collections.sort(list, new MapValueComparator());
        Map<String, Pet> returnMap = new LinkedHashMap<>();
        for (Map.Entry<String, Pet> entry : list) {
            returnMap.put(entry.getKey(), entry.getValue());
        }
        return returnMap;
    }


    /**
     * 基本的key排序方式
     * @param map
     * @return
     */
    public static Map compareByKey(Map map) {
        if (map == null || map.isEmpty()) {
            return null;
        }
        Map returnMap = new TreeMap<String, Pet>(new MapKeyComparator());
        returnMap.putAll(map);
        return returnMap;
    }

    static class MapKeyComparator implements Comparator<String> {
        @Override
        public int compare(String o1, String o2) {
            return o1.compareTo(o2);
        }
    }

    static class MapValueComparator implements Comparator<Map.Entry<String, Pet>> {

        @Override
        public int compare(Map.Entry<String, Pet> o1, Map.Entry<String, Pet> o2) {
            return o1.getValue().old - o2.getValue().old;
        }
    }

}

使用Java8中Map.Entry的新方法:
原理:map提取Entry的list之后转化成流(string()),然后把流排序按照传入的Comparator排序。
key排序:

   public static void sortByKey(Map map) {
        List<Map.Entry<String, Pet>> compareByValue = (List<Map.Entry<String, Pet>>) map.entrySet()
                .stream()
                .sorted(Map.Entry.comparingByKey())
                .collect(Collectors.toList());
        compareByValue.forEach(System.out::println);
        System.out.println("sortByKey: end");
    }

value排序:

    public static void sortByValue(Map map) {
        List<Map.Entry<String, Pet>> compareByValue = (List<Map.Entry<String, Pet>>) map.entrySet()
                .stream()
                .sorted(Map.Entry.comparingByValue())
                .collect(Collectors.toList());
        compareByValue.forEach(System.out::println);
    }

传入比较器参数:

    public static void sortByKey2(Map map) {
        List<Map.Entry<String, Pet>> compareByValue = (List<Map.Entry<String, Pet>>) map.entrySet()
                .stream()
                .sorted(Map.Entry.comparingByValue((Pet pet1, Pet pet2) -> {
                    return pet1.name.length() - pet2.name.length();
                }))
                .collect(Collectors.toList());
        compareByValue.forEach(System.out::println);
        System.out.println("sortByKey2: end");
    }

http://blog.csdn.net/kaka0930/article/details/52996486###;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值