JAVA中对List<map<String,Object>>根据map某个key值进行排序

简介: 方法compareTo()比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。返回整数,1,-1,0;返回1表示大于,返回-1表示小于,返回0表示相等。普通的Integer 类型key进行比较:public class java_ListMapSort...
方法
compareTo()
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
返回整数,1,-1,0;返回1表示大于,返回-1表示小于,返回0表示相等。


普通的Integer 类型key进行比较
public class java_ListMapSort {
    public static void main(String[] args) {
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        Map<String, Object> map1 = new HashMap<String, Object>();
        map1.put("name", "p");
        map1.put("cj", "5");
        Map<String, Object> map2 = new HashMap<String, Object>();
        map2.put("name", "h");
        map2.put("cj", "12");
        Map<String, Object> map3 = new HashMap<String, Object>();
        map3.put("name", "f");
        map3.put("cj", "31");
        list.add(map1);
        list.add(map3);
        list.add(map2);
        //排序前 
        for (Map<String, Object> map : list) {
            System.out.println(map.get("cj"));
        }
        Collections.sort(list, new Comparator<Map<String, Object>>() {
            public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                Integer name1 = Integer.valueOf(o1.get("cj").toString()) ;//name1是从你list里面拿出来的一个 
                Integer name2 = Integer.valueOf(o2.get("cj").toString()) ; //name1是从你list里面拿出来的第二个name
                return name1.compareTo(name2);
            }
        });
        //排序后 
        System.out.println("-------------------");
        for (Map<String, Object> map : list) {
            System.out.println(map.get("cj"));
        }
    }
}

 

 

中文字符比较:

要实现汉字按首字母排序,主要是设置语言环境,如下语句设置语言环境:

 

这里用到了Collator类,此类实现了Comparator接口,用他的getInstance就可以用指定的语言环境来构造一个Collator对象:

然后用如下语句创建Comparator:

 

[java]  view plain  copy
 
  1. Comparator<Object> com=Collator.getInstance(java.util.Locale.CHINA);  


要注意的是Comparator里面的泛型类型一定要是Object类型,因为Collator类实现的Comparator接口里面传入的对象是Object:

 

 

完整的实现代码如下:

 

[java]  view plain  copy
 
  1. import java.text.Collator;    
  2. import java.util.*;    
  3. import java.util.Comparator;    
  4. public class cpm {    
  5.     public static void main(String[] args) {    
  6.         // TODO Auto-generated method stub    
  7.         Comparator<Object> com=Collator.getInstance(java.util.Locale.CHINA);    
  8.         String[] newArray={"中山","汕头","广州","安庆","阳江","南京","武汉","北京","安阳","北方"};    
  9.         List<String> list = Arrays.asList(newArray);  
  10.         Collections.sort(list, com);   
  11.         for(String i:list){    
  12.             System.out.print(i+"  ");    
  13.         }  
  14.     }    
  15. }  


输出结果是:

安庆  安阳  北方  北京  广州  南京  汕头  武汉  阳江  中山  

 

 

实例2:

     List<Map<String,Object>> list = new ArrayList<>();
        List<GroupItemUser> groupItemUserLists = groupItemUserRepository.findAllByAgencyId(agencyId);
        Iterator<GroupItemUser> iterator = groupItemUserLists.iterator();
        for (; iterator.hasNext();) {
            GroupItemUser groupItemUser = (GroupItemUser) iterator.next();
            Long userId = groupItemUser.userId();
            SysUser sysUser = sysUserRepository.findOne(userId);
            String name = sysUser.name();
            Map<String, Object> map = new HashMap<>();
            map.put("id", userId);
            map.put("name", name);
            list.add(map);
        }
        
        //将List集合按照Map的name进行排序(a>b>c ...)
        if(CollectionUtils.isNotEmpty(list)){
            Collections.sort(list,new Comparator<Map<String,Object>>() {
                    @Override
                    public int compare(Map<String,Object> o1, Map<String,Object> o2) {
                        Collator instance = Collator.getInstance(Locale.CHINA);
                        return instance.compare(o1.get("name").toString(), o2.get("name").toString());
                    }
            }); 
        }
        
        return list;

 

相关文章
|
8天前
|
Java API 索引
Java基础—笔记—String篇
本文介绍了Java中的`String`类、包的管理和API文档的使用。包用于分类管理Java程序,同包下类无需导包,不同包需导入。使用API时,可按类名搜索、查看包、介绍、构造器和方法。方法命名能暗示其功能,注意参数和返回值。`String`创建有两种方式:双引号创建(常量池,共享)和构造器`new`(每次新建对象)。此外,列举了`String`的常用方法,如`length()`、`charAt()`、`equals()`、`substring()`等。
13 0
|
23天前
|
Java
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
24 0
|
30天前
|
Java
Java String split()方法详细教程
Java String split()方法详细教程
20 0
|
6天前
|
存储 算法 安全
Java Map:键值对的奇妙之旅
Java Map:键值对的奇妙之旅
29 0
Java Map:键值对的奇妙之旅
|
7天前
|
JavaScript
js 字符串String转对象Object
该代码示例展示了如何将一个以逗号分隔的字符串(`&#39;1.2,2,3,4,5&#39;`)转换为对象数组。通过使用`split(&#39;,&#39;)`分割字符串并`map(parseFloat)`处理每个元素,将字符串转换成浮点数数组,最终得到一个对象数组,其类型为`object`。
|
27天前
|
Java 索引
【Java】String类常用方法总结
【Java】String类常用方法总结
20 0
|
28天前
|
SQL Java
使用java中的String类操作复杂的字符串
使用java中的String类操作复杂的字符串
9 0
|
28天前
|
存储 Java 索引
Java String类
Java String类
12 0
|
28天前
|
安全 Java 索引
Java StringBuffer 类
Java StringBuffer 类
7 0
|
1月前
|
Java
JAVA——List中剔除空元素(null)的三种方法汇总
JAVA——List中剔除空元素(null)的三种方法汇总