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同理;

原文地址:https://www.cnblogs.com/ljch/p/12157282.html

时间: 2024-10-03 19:34:14

Java中对listmap根据map某个key值进行排序的相关文章

springboot中处理mybatis返回Map时key值的大小写

为了统一不同数据库返回key值大小写不一致的问题,特自定义ObjectWrapperFactory来做统一的处理 1,首先自定义MapWrapper /** * 将Map的key全部转换为小写 * */ public class MapKeyLowerWrapper extends MapWrapper { public MapKeyLowerWrapper(MetaObject metaObject, Map<String, Object> map) { super(metaObject,

JAVA中对list map根据map某个key值进行排序

package test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; public class java_ListMapSort { public static void main(String[] args) { // TO

Java中集合List,Map和Set的区别

Java中集合List,Map和Set的区别 1.List和Set的父接口是Collection,而Map不是 2.List中的元素是有序的,可以重复的 3.Map是Key-Value映射关系,且Key不能重复 4.Set中的元素是无序的,不可重复的

Java中的Collection和Map(二)--List体系

正如我们在Java中的Collection和Map(一)中所看到的那样,我们经常使用的有ArrayList.LinkedList.Vector.Stack.这里不再累述它们的使用方法,这里主要是说一下他们的底层结构以及使用时机. 1.ArrayList 我们都知道ArrayList是我们经常使用的List集合之一.我们在使用的时候经常通过 new ArrayList() 方法来创建一个ArrayList集合,然后调用它的 add(E e) 方法向集合中存储元素.那么你是否了解当我们使用 new

STL map 按key值和按value值排序

map是用来存放<key, value>键值对的数据结构,能够非常方便高速的依据key查到对应的value. 假如存储水果和其单位价格.我们用map来进行存储就是个不错的选择. 我们这样定义.map<string, double>.当中水果用string类型.作为Key:该水果的单位价格用double类型,作为value. 这样一来,我们能够依据水果名高速的查找到价格. 我们不仅要将水果和相应的价格输出,还想知道依照价格高低进行排序的结果. 换句话说,我们希望可以对map进行按Ke

使用对象中的几个key值来排序

环境:vs2012 win7 c++ 1 #include<alogrithem> 2 写一个比较函数,体现对象间是按照哪些key值来排序的. 3 使用std::sort函数. 例子如下: #include <algorithm> /* 排序规律: 星级最大的排前面,其次等级越大排前面,再其次是经验越大排前面,最后是其次是ID值越大排越后面. */ bool myCompare(GameCardVo* obj1,GameCardVo* obj2) { if (obj1->co

java.util.Map按照key值合并的value的Collection 集合中。

用java实现把多个map的内容合并的一个resultMap中 代码大致如下 /** * @author Shalf */ public class MapUtil { /** * 把partMap数据合并放到resultMap中. * @param resultMap * @param partMap */ public static <T, F, K extends Collection<F>> void merge2ResultMap(Map<T, K> resu

Java Map按照Key和Value排序【转】

package kingtool.sort; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; import jav

JAVA中Collection接口和Map接口的主要实现类

Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同的元素而另一些不行.一些能排序而另一些不行.Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set. 所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collectio