【转载】java List分组和排序处理 Map 应用

  1. package com.common.main.mapAndList;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.Iterator;  
  6. import java.util.List;  
  7. import java.util.Map;  
  8.   
  9. /** 
  10.  * @author LiJianShe 
  11.  * @version 創建時間:Mar 19, 2010 3:33:35 PM 類說明:Student.java 
  12.  */  
  13. public class Student {  
  14.     private String classId;  
  15.   
  16.     private String studentId; // 学号  
  17.   
  18.     private String studentName; // 姓名  
  19.   
  20.     private String sex; // 性別 0 男 1 女  
  21.   
  22.     public String getClassId() {  
  23.         return classId;  
  24.     }  
  25.   
  26.     public void setClassId(String classId) {  
  27.         this.classId = classId;  
  28.     }  
  29.   
  30.     public String getSex() {  
  31.         return sex;  
  32.     }  
  33.   
  34.     public void setSex(String sex) {  
  35.         this.sex = sex;  
  36.     }  
  37.   
  38.     public String getStudentId() {  
  39.         return studentId;  
  40.     }  
  41.   
  42.     public void setStudentId(String studentId) {  
  43.         this.studentId = studentId;  
  44.     }  
  45.   
  46.     public String getStudentName() {  
  47.         return studentName;  
  48.     }  
  49.   
  50.     public void setStudentName(String studentName) {  
  51.         this.studentName = studentName;  
  52.     }  
  53.       
  54.     public static void main(String[] args) {  
  55.         // TODO Auto-generated method stub  
  56.           
  57.         List studentAllList = null ;// 所以班級的学生  
  58.           
  59.         //步骤1  
  60.         Map<String ,List> map = new HashMap<String ,List>();  
  61.         Map<String ,Object> mapLast = new HashMap<String ,Object>();  
  62. //      for(Student student : studentAllList){  
  63.         for(Iterator it = studentAllList.iterator();it.hasNext();){  
  64.             Student student = (Student)it.next();  
  65.   
  66.             if(map.containsKey(student.getClassId())){ //如果已经存在这个数组,就放在这里  
  67.                 List studentList = map.get(student.getClassId());  
  68.                 studentList.add(student);  
  69.             }else{  
  70.                 List studentList = new ArrayList();  //重新声明一个数组list  
  71.                 studentList.add(student);  
  72.                 map.put(student.getClassId(), studentList);  
  73.             }  
  74.         }  
  75.           
  76. //      步骤2   
  77. //      利用 处理1 步骤 分组完的数据 ,按性别 男/女  再次分组  
  78.         for(Map.Entry<String, List> m: map.entrySet()){ //按键值遍历 Map  
  79.             Map mapList = new HashMap(); //  
  80.               
  81.             List studentSingle  = m.getValue(); //同一班级的学生,男女  
  82.             List studentListMen = new ArrayList(); // 声明一个存放男生的 list  
  83.             List studentListWomen = new ArrayList(); // 声明一个存放女生的 list  
  84.             for(Iterator it = studentSingle .iterator();it.hasNext();){//遍历  
  85.                 Student student = (Student)it.next();  
  86.                 if("0".equals(student.getSex())){ //男生  
  87.                     studentListMen.add(student);  //男生  
  88.                 }else{  
  89.                     studentListWomen.add(student); //女生  
  90.                 }  
  91.             }  
  92.             mapLast.put("班级", m.getKey());  
  93.             mapLast.put("学生 男", studentListMen);  
  94.         }  
  95.     }  
  96. }  


在一些应用中,需要将List中的对象按某种情况分组或者排序处理。做个小结如下: 



1.       如一个List中存放了ProductDoing对象,productDoing对象有rawTypeId 现在要求将rawTypeId分组处理。 



先用Map找出list中所有的分组: 



//原料类型组 

Map<Integer,String> groups = new HashMap<Integer,String>(); 

for(ProductDoingVo pd : products){ 

       groups.put(pd.getRawTypeId(),"");//这里并没有将该组的数据存入,看自己的需求吧 





接下来就可以对已知的分组处理。 

for(Integer rawTypeId : groups.keySet()){ 

for(ProductDoingVo pd : products){ 

   if(rawTypeId.equals(pd.getRawTypeId())){ 

              //处理该组的数据 

     } 








2.    如2个List中存放了map<String,String>对象, 一个map是一个条数据库表记录,key是数据库表中的字段名,value是字段对应的值, map中操作时间的key_value, 需要将这2个List合并之后按map中的操作时间去排个序。。。。 



//先用addAll将list连接起来,合成一个List 

List result = new ArrayList();   

Collections.addAll(result, a);//假设a b即为那两个list   

Collections.addAll(result, b);  



//实现一个Comparator就好了,根据map中的操作时间来排序 

   Collections.sort(result, new Comparator<Map>()   

      {   

            public int compare(Map o1, Map o2) {   

               Date date1 = (Date)o1.get("trackdatetime");   

               Date date2 = (Date)o2.get("trackdatetime");   

              return date1.compareTo(date2);   

          }   

});  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于Java中的List集合进行分组排序,可以使用Java 8中的Stream API进行操作。下面是一个示例代码,演示如何对List进行分组排序: ```java import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Person> personList = new ArrayList<>(); personList.add(new Person("Alice", 25)); personList.add(new Person("Bob", 30)); personList.add(new Person("Charlie", 20)); personList.add(new Person("David", 25)); personList.add(new Person("Eve", 30)); personList.add(new Person("Frank", 20)); // 按年龄分组排序 Map<Integer, List<Person>> groupedByAge = personList.stream() .sorted(Comparator.comparing(Person::getAge)) .collect(Collectors.groupingBy(Person::getAge)); // 输出结果 for (Map.Entry<Integer, List<Person>> entry : groupedByAge.entrySet()) { System.out.println("Age: " + entry.getKey()); for (Person person : entry.getValue()) { System.out.println(person.getName()); } System.out.println(); } } } class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } } ``` 在这个示例中,我们创建了一个Person类来表示人员信息,然后创建了一个包含若干Person对象的List。我们使用Stream API对List进行操作,首先按照年龄进行排序,然后使用groupingBy方法按照年龄进行分组。最后,我们遍历分组后的结果,并输出每个分组中的人员信息。 请注意,上述示例代码假设每个人的年龄是一个整数,并且按照升序排序。您可以根据实际需求进行相应的修改。希望对您有帮助!如有任何疑问,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值