• 自定义规则,对List<Map<String,Object>> List<Object>进行排序


      1 package lltse.java.collection;
      2 
      3 import java.util.ArrayList;
      4 import java.util.Collections;
      5 import java.util.Comparator;
      6 import java.util.HashMap;
      7 import java.util.List;
      8 import java.util.Map;
      9 import java.util.Random;
     10 
     11 public class ListDemo {
     12 
     13     /**
     14      * @param args
     15      */
     16     public static void main(String[] args) 
     17     {
     18         System.out.println("---------------开始-----------------------");
     19         List<Map<String, Object>> students = getSortStudentList();
     20         for(Map<String,Object> map:students)
     21         {
     22             System.out.println("Student:>>>"+map.get("Student"));
     23             System.out.println("distance:>>>"+map.get("distance"));
     24         }
     25         
     26         System.out.println("---------------分割线-----------------------");
     27         
     28         List<Object> persons =  getSortPerson();
     29         for(Object p :persons)
     30         {
     31             System.out.println("Person Name:>>>"+((Person)p).getName());
     32             System.out.println("Person Sex:>>>"+((Person)p).getSex());
     33             System.out.println("Person Age:>>>"+((Person)p).getAge());
     34         }
     35         System.out.println("---------------结束-----------------------");
     36     }
     37 
     38     /**
     39      * 对List中的对象按照距离进行排序
     40      * @return
     41      */
     42     public static List<Map<String, Object>> getSortStudentList() 
     43     {
     44         List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
     45         Random rd = new Random(100);
     46         for (int i = 0; i < 5; i++) 
     47         {
     48             Map<String, Object> map = new HashMap<String, Object>();
     49             map.put("Student", "Student" + i);
     50             map.put("distance", rd.nextDouble());
     51 
     52             list.add(map);
     53         }
     54 
     55         //Collections.synchronizedList(list);
     56         //自定义排序规则,进行排序
     57         Collections.sort(list, new Comparator<Map<String, Object>>() 
     58             {
     59             @Override
     60             public int compare(Map<String, Object> o1, Map<String, Object> o2) 
     61             {
     62                 Double d1 = (Double)o1.get("distance");
     63                 Double d2 = (Double)o2.get("distance");
     64                 return d1.compareTo(d2);
     65             }
     66         });
     67 
     68         return list;
     69     }
     70     
     71     /**
     72      * 引用外部比较器,将人员按年龄排序
     73      * @return
     74      */
     75     public static List<Object> getSortPerson()
     76     {
     77         List<Object> list = new ArrayList<Object>();
     78         Random rd = new Random();
     79         for(int s = 1;s <= 10; s++)
     80         {
     81             Person p = new Person();
     82             p.setAge(rd.nextInt(100));
     83             p.setName("Person"+s);
     84             String sex = "男";
     85             if(s % 2 > 0)
     86             {
     87                 sex = "女";
     88             }
     89             p.setSex(sex);
     90             
     91             list.add(p);
     92         }
     93         TestCompartor tc = new TestCompartor();
     94         Collections.sort(list, tc);
     95         
     96         return list;
     97     }
     98 }
     99 
    100 
    101 /**
    102  * 比较器类,按年龄升序排列
    103  * @author Administrator
    104  *
    105  */
    106 class TestCompartor implements Comparator<Object>
    107 {
    108     @Override
    109     public int compare(Object o1, Object o2) {
    110 
    111         Person p1 = (Person)o1;
    112         Person p2 = (Person)o2;
    113         if(p1.getAge()>p2.getAge())
    114         {
    115             return 1;
    116         }
    117         else
    118         {
    119             return -1;
    120         }
    121     }
    122 }

    测试输出结果如下:

     1 ---------------开始-----------------------
     2 Student:>>>Student1
     3 distance:>>>0.19497605734770518
     4 Student:>>>Student4
     5 distance:>>>0.6186076060240648
     6 Student:>>>Student2
     7 distance:>>>0.6671595726539502
     8 Student:>>>Student0
     9 distance:>>>0.7220096548596434
    10 Student:>>>Student3
    11 distance:>>>0.7784408674101491
    12 ---------------分割线-----------------------
    13 Person Name:>>>Person8
    14 Person Sex:>>>15 Person Age:>>>11
    16 Person Name:>>>Person7
    17 Person Sex:>>>18 Person Age:>>>15
    19 Person Name:>>>Person6
    20 Person Sex:>>>21 Person Age:>>>19
    22 Person Name:>>>Person10
    23 Person Sex:>>>24 Person Age:>>>33
    25 Person Name:>>>Person4
    26 Person Sex:>>>27 Person Age:>>>46
    28 Person Name:>>>Person9
    29 Person Sex:>>>30 Person Age:>>>53
    31 Person Name:>>>Person3
    32 Person Sex:>>>33 Person Age:>>>66
    34 Person Name:>>>Person5
    35 Person Sex:>>>36 Person Age:>>>74
    37 Person Name:>>>Person2
    38 Person Sex:>>>39 Person Age:>>>79
    40 Person Name:>>>Person1
    41 Person Sex:>>>42 Person Age:>>>82
    43 ---------------结束-----------------------
  • 相关阅读:
    QT添加托盘代码
    2010年左右我说要做一个操作系统的时候,绝大多数人以为那是天方夜谭,是堂吉诃德式的行为。今天,我们讨论YunOS会成为一个新的生态和创新平台,更多人相信这件事是可能的。
    台哥算法练习:八皇后问题
    台哥算法练习 汉诺塔问题
    台哥算法练习:数组排序的几种算法
    面试遇到的两道算法题
    台哥算法练习 50人围圈报数
    台哥算法练习 自己写的一个LinkedList
    台哥算法练习 自己写的一个ArrayList
    台哥算法练习 寻找和为某值的子集
  • 原文地址:https://www.cnblogs.com/lltse/p/5500150.html
Copyright © 2020-2023  润新知