对Map类分别按照Key,Value排序,返回值为List对象

MapSort

对Java中Map进行排序操作
- 原理介绍: 涉及到Comparable接口以及Comparator接口的操作
例子

public class Person{
    String name;
    int age;
}
Comparable接口

comparable
用于在类的内部实现的compareTo函数进行比较两个对象的;
使用Comparable接口的话,需要在Person类实现Comparable接口,并且实现其compareTo
方法,当对比两个类的时候直接调用compareTo函数即可
- 优点:使用简单,直接实现方法即可
- 缺点:需要修改类

Comparator接口

用户在类的外部实现compare函数进行比较对象
使用方法:
1. 定义一个PersonSort类,实现Comparator接口的函数compare函数;
2. 使用Collections.sort(List,Comparator)进行排序

MapSort实现

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

public class MapSort{


    public static <K extends Comparable<K>,V extends Comparable<V>> List<Map.Entry<K, V>> sortByKey(final Map<K,V> map){
        List<Map.Entry<K, V>> mapList = new ArrayList<>();
        mapList.addAll(map.entrySet());
        Collections.sort(mapList,new MapKeySort<K,V>());
        return mapList;
    }

    public static <K extends Comparable<K>,V extends Comparable<V>> List<Map.Entry<K, V>> sortByValue(final Map<K,V> map){
        List<Map.Entry<K, V>> mapList = new ArrayList<>();
        mapList.addAll(map.entrySet());
        Collections.sort(mapList,new MapValueSort<K,V>());
        return mapList;
    }


    private static class MapKeySort<K extends Comparable<K>,V extends Comparable<V>> implements Comparator<Map.Entry<K, V>>{

        @Override
        public int compare(Entry<K, V> o1, Entry<K, V> o2) {
            // TODO 自动生成的方法存根
            return o1.getKey().compareTo(o2.getKey());
        }

    }

    private static class MapValueSort<K extends Comparable<K>,V extends Comparable<V>> implements Comparator<Map.Entry<K, V>>{

        @Override
        public int compare(Entry<K, V> o1, Entry<K, V> o2) {
            // TODO 自动生成的方法存根
            return o1.getValue().compareTo(o2.getValue());
        }

    }
}
  1. 按照key对Map进行排序
    • 定义一个MapKeySort类,实现Comparator接口
    • 在compare函数里面,对Map.Entry类进行操作
  2. 按照value对Map进行排序
    • 定义一个MapValueSort类,实现Comparator接口
    • 在compare函数里面,对Map.Entry类进行操作

调用案例:

Map<String, Integer> map = new HashMap<>();
        map.put("a", 7);
        map.put("c", 3);
        map.put("z", 2);
        map.put("b", 8);
        map.put("w", 4);
        map.put("z", 1);
        System.out.println(map);
        System.out.println(MapSort.sortByKey(map));
        System.out.println(MapSort.sortByValue(map));

其他的就自己看吧,不难。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值