Java中对listmap根据map某个key值进行排序

Posted 倾舞绕梦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中对listmap根据map某个key值进行排序相关的知识,希望对你有一定的参考价值。

  Collection提供了排序方法sort(),但对于List<Map> 需要根据Map中某一个或某几个Key进行排序,就需要重写sort()方法来实现了;

  实现方式如下:

public static void main(String[] args) {
        List<Map<String, String>> list = new ArrayList<Map<String, String>>();
        Map<String, String> map1 = new HashMap<String, String>();
        map1.put("id", "1");
        map1.put("name", "zhangsan");
        Map<String, String> map2 = new HashMap<String, String>();
        map2.put("id", "3");
        map2.put("name", "zhangsan2");
        Map<String, String> map3 = new HashMap<String, String>();
        map3.put("id", "4");
        map3.put("name", "wangwu2");
        Map<String, String> map4 = new HashMap<String, String>();
        map4.put("id", "2");
        map4.put("name", "zhaoliu");
        Map<String, String> map5 = new HashMap<String, String>();
        map5.put("id", "4");
        map5.put("name", "wangwu1");
        list.add(map1);
        list.add(map3);
        list.add(map2);
        list.add(map4);
        list.add(map5);
        //排序前 
        System.out.println("---------------排序前------------------");
        for (Map<String, String> map : list) {
          System.out.println(map);
        }
        //先根据ID在根据NAME进行排序
        Collections.sort(list, new Comparator<Map<String, String>>() {
          public int compare(Map<String, String> o1, Map<String, String> o2) {
              String sort1=o1.get("id")+o1.get("name");//从list中拿出来第一个的id和name拼接到一起
              String sort2=o2.get("id")+(String) o2.get("name");//从list中拿出来第二个的id和name拼接到一起
              return sort1.compareTo(sort2);//利用String类的compareTo方法
          }
        });
        //排序后 
        System.out.println("---------------排序后------------------");
        for (Map<String, String> map : list) {
          System.out.println(map);
        }
    }

结果如下:

---------------排序前------------------
{id=1, name=zhangsan}
{id=4, name=wangwu2}
{id=3, name=zhangsan2}
{id=2, name=zhaoliu}
{id=4, name=wangwu1}
---------------排序后------------------
{id=1, name=zhangsan}
{id=2, name=zhaoliu}
{id=3, name=zhangsan2}
{id=4, name=wangwu1}
{id=4, name=wangwu2}

 

上述代码是先根据ID再根据NAME进行排序的,使用MAP中的一个key进行排序只需要获取一个key进行排序即可:

Collections.sort(list, new Comparator<Map<String, String>>() {
            public int compare(Map<String, String> o1, Map<String, String> o2) {
                String sort1=o1.get("id");//从list中拿出来第一个的id和name拼接到一起
                String sort2=o2.get("id");//从list中拿出来第二个的id和name拼接到一起
                return sort1.compareTo(sort2);//利用String类的compareTo方法
            }
          });

List泛型为javaBean同理;

以上是关于Java中对listmap根据map某个key值进行排序的主要内容,如果未能解决你的问题,请参考以下文章

JAVA8中对List<map<String,Object>>根据map某个value值进行排序,还支持中文排序,可以替代order by

Java 8 Stream根据某个相同的key合并两个Map List,其他key相同时优先保留其中一个List的值

List<Map<String, String>> 形式 list根据 每个map中的key排序

List<Map<String, String>> 形式 list根据 每个map中的key排序

List<Map<String, String>> 形式 list根据 每个map中的key排序

java 快速将两个list<map> 根据map中某个固定key的value相等整合成一个list<map>