自定义规则,对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 ---------------结束-----------------------

 

转载于:https://www.cnblogs.com/lltse/p/5500150.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值