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 ---------------结束-----------------------