Java中对Map进行排序

在力扣刷题的过程中,一些题目常常需要使用Map来进行存储,经过一系列的处理以后还需要对map中的数据进行排序,便于输出结果。

本笔记主要是记录如何对map进行排序。

以0904华为笔试的第一题为例,最后的map是Map<Integer,Integer> 形式存在的,排序要求是首先对用value从大到小进行排序,当value相同时,使用key从大到小进行排序。最后输出排序后的key值集合。

首先将map转换为Map.Entry的集合

List<Map.Entry<Integer, Integer>> entries = new ArrayList<>(map.entrySet());

然后对集合entries进行排序,方法一使用匿名内部类进行排序

entries.sort(new Comparator<Map.Entry<Integer,Integer>>() {
    @Override
    public int compare(Map.Entry<Integer,Integer>>() entry1, Map.Entry<Integer,Integer>>() entry2){
    int valueCom = Integer.compare(entry2.getValue(), entry1.getValue());
    if(valueCom !=0) return valueCom;
    return Integer.compare(entry2.getKey(), entry1.getKey());
}
}
)

方法二通过Lambda简化代码

entries.sort((entry1, entry2) -> {
    int valueComparison = Integer.compare(entry2.getValue(), entry1.getValue());
        if (valueComparison != 0) {
            return valueComparison;
        }
        return Integer.compare(entry2.getKey(), entry1.getKey());
})

最后按要求整理结果

        List<Integer> sortedKeys = new ArrayList<>();
           for (Map.Entry<Integer, Integer> entry : entries) {
            sortedKeys.add(entry.getKey());
        }
        return sortedKeys;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值