【轉載】java List分組和排序處理 Map 應用
阿新 • • 發佈:2018-12-31
- package com.common.main.mapAndList;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- /**
- * @author LiJianShe
- * @version 建立時間:Mar 19, 2010 3:33:35 PM 類說明:Student.java
- */
- publicclass Student {
- private String classId;
- private String studentId; // 學號
- private String studentName; // 姓名
- private String sex; // 性別 0 男 1 女
- public String getClassId() {
- return classId;
- }
- publicvoid setClassId(String classId) {
- this.classId = classId;
- }
- public String getSex() {
- return
- }
- publicvoid setSex(String sex) {
- this.sex = sex;
- }
- public String getStudentId() {
- return studentId;
- }
- publicvoid setStudentId(String studentId) {
- this.studentId = studentId;
- }
- public String getStudentName() {
- return
- }
- publicvoid setStudentName(String studentName) {
- this.studentName = studentName;
- }
- publicstaticvoid main(String[] args) {
- // TODO Auto-generated method stub
- List studentAllList = null ;// 所以班級的學生
- //步驟1
- Map<String ,List> map = new HashMap<String ,List>();
- Map<String ,Object> mapLast = new HashMap<String ,Object>();
- // for(Student student : studentAllList){
- for(Iterator it = studentAllList.iterator();it.hasNext();){
- Student student = (Student)it.next();
- if(map.containsKey(student.getClassId())){ //如果已經存在這個陣列,就放在這裡
- List studentList = map.get(student.getClassId());
- studentList.add(student);
- }else{
- List studentList = new ArrayList(); //重新宣告一個數組list
- studentList.add(student);
- map.put(student.getClassId(), studentList);
- }
- }
- // 步驟2
- // 利用 處理1 步驟 分組完的資料 ,按性別 男/女 再次分組
- for(Map.Entry<String, List> m: map.entrySet()){ //按鍵值遍歷 Map
- Map mapList = new HashMap(); //
- List studentSingle = m.getValue(); //同一班級的學生,男女
- List studentListMen = new ArrayList(); // 宣告一個存放男生的 list
- List studentListWomen = new ArrayList(); // 宣告一個存放女生的 list
- for(Iterator it = studentSingle .iterator();it.hasNext();){//遍歷
- Student student = (Student)it.next();
- if("0".equals(student.getSex())){ //男生
- studentListMen.add(student); //男生
- }else{
- studentListWomen.add(student); //女生
- }
- }
- mapLast.put("班級", m.getKey());
- mapLast.put("學生 男", studentListMen);
- }
- }
- }
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);
}
});