一、问题背景

在java的开发过程中,我们往往也需要用对象进行分组进行处理,如何对List进行分组呢?以下我们简单高效的实现分组

二、问题解决

1   //以下WarehouseDeliveryTimeVO的列表中对其属性logisticsModel(物流模式)进行分组,new String[]{}可以按照多个属性进行分组,allTimeVO为其对象列表
2   Map<String,List<WarehouseDeliveryTimeVO>> logisticsModelGoodsMap = Hashlize.hashlizeObjects( allTimeVO,new HashKeyAdapter(new String[]{"logisticsModel"}));
3       //通过迭代可以获取分组后的结果
4         for(String key : logisticsModelGoodsMap.keySet()){
5              List<WarehouseDeliveryTimeVO> timeVO = logisticsModelGoodsMap.get(key);
6           //以下是获取分组后列表的其他业务操作
7              //checkTimeCross(timeVO);
8          }

 

当然我们也可以按照多个对象的属性进行分组,方法就是在  new String[]{"属性一","属性二"},即可按照所设置的两个属性进行分组,简单,高效。

用作公共类 超棒!!

 涉及的接口 IHashKey 

1 package com.xxxx.dsc.application.utils;
2 
3 public interface IHashKey {
4     String getKey(Object var1);
5 }

接口 ICombine 

1 package com.xxxx.dsc.application.utils;
2 
3 public interface ICombine {
4     Object combine(Object var1, Object var2);
5 }

类 HashKeyAdapter 

1 package com.xxxx.dsc.application.utils;
 2 
 3 import java.lang.reflect.InvocationTargetException;
 4 import org.apache.commons.beanutils.PropertyUtils;
 5 import org.apache.commons.lang3.StringUtils;
 6 
 7 public class HashKeyAdapter implements IHashKey {
 8     String[] m_KeyFields;
 9     static final String m_FixKey = "FIXKEY#$@";
10 
11     public HashKeyAdapter(String[] keyFields) {
12         this.m_KeyFields = keyFields;
13     }
14 
15     public String getKey(Object o) {
16         if (this.m_KeyFields != null && this.m_KeyFields.length != 0) {
17             String key = "";
18 
19             for(int i = 0; i < this.m_KeyFields.length; ++i) {
20                 try {
21                     if (StringUtils.isNotEmpty("" + PropertyUtils.getSimpleProperty(o, this.m_KeyFields[i]))) {
22                         Object v = PropertyUtils.getSimpleProperty(o, this.m_KeyFields[i]);
23                         key = key + (v == null ? "" : v + "");
24                     }
25                 } catch (IllegalAccessException var5) {
26                     throw new RuntimeException(var5.getMessage(), var5);
27                 } catch (InvocationTargetException var6) {
28                     throw new RuntimeException(var6.getMessage(), var6);
29                 } catch (NoSuchMethodException var7) {
30                     throw new RuntimeException(var7.getMessage(), var7);
31                 }
32             }
33 
34             return key;
35         } else {
36             return "FIXKEY#$@";
37         }
38     }
39 }

类 Hashlize 

1 //
  2 // 分组 返回Map  
  3 //  4
  5 
  6 package com.xxxx.dsc.application.utils;
  7 
  8 import java.util.ArrayList;
  9 import java.util.HashMap;
 10 import java.util.HashSet;
 11 import java.util.LinkedHashMap;
 12 import java.util.List;
 13 import java.util.Set;
 14 import org.apache.commons.collections.CollectionUtils;
 15 
 16 public class Hashlize {
 17     public Hashlize() {
 18     }
 19 
 20     public static HashMap hashlizeObjects(Object[] objs, IHashKey iHashKey) {
 21         if (objs != null && objs.length != 0) {
 22             if (iHashKey == null) {
 23                 throw new RuntimeException("iHashKey cann't be null");
 24             } else {
 25                 HashMap result = new HashMap();
 26 
 27                 for(int i = 0; i < objs.length; ++i) {
 28                     String key = iHashKey.getKey(objs[i]);
 29                     ArrayList al = (ArrayList)result.get(key);
 30                     if (al == null) {
 31                         al = new ArrayList();
 32                         result.put(key, al);
 33                     }
 34 
 35                     al.add(objs[i]);
 36                 }
 37 
 38                 return result;
 39             }
 40         } else {
 41             return null;
 42         }
 43     }
 44 
 45     public static HashMap hashlizeObjects(List objs, IHashKey iHashKey) {
 46         if (objs != null && !objs.isEmpty()) {
 47             if (iHashKey == null) {
 48                 throw new RuntimeException("iHashKey cann't be null");
 49             } else {
 50                 HashMap result = new HashMap();
 51 
 52                 for(int i = 0; i < objs.size(); ++i) {
 53                     String key = iHashKey.getKey(objs.get(i));
 54                     ArrayList al = (ArrayList)result.get(key);
 55                     if (al == null) {
 56                         al = new ArrayList();
 57                         result.put(key, al);
 58                     }
 59 
 60                     al.add(objs.get(i));
 61                 }
 62 
 63                 return result;
 64             }
 65         } else {
 66             return null;
 67         }
 68     }
 69 
 70     public static LinkedHashMap hashlizeObjectsLinked(List objs, IHashKey iHashKey) {
 71         if (objs != null && !objs.isEmpty()) {
 72             if (iHashKey == null) {
 73                 throw new RuntimeException("iHashKey cann't be null");
 74             } else {
 75                 LinkedHashMap result = new LinkedHashMap();
 76 
 77                 for(int i = 0; i < objs.size(); ++i) {
 78                     String key = iHashKey.getKey(objs.get(i));
 79                     ArrayList al = (ArrayList)result.get(key);
 80                     if (al == null) {
 81                         al = new ArrayList();
 82                         result.put(key, al);
 83                     }
 84 
 85                     al.add(objs.get(i));
 86                 }
 87 
 88                 return result;
 89             }
 90         } else {
 91             return null;
 92         }
 93     }
 94 
 95     public static HashMap hashlizeMap(Object[] objs, IHashKey iHashKey) {
 96         if (objs != null && objs.length != 0) {
 97             if (iHashKey == null) {
 98                 throw new RuntimeException("iHashKey cann't be null");
 99             } else {
100                 HashMap result = new HashMap();
101 
102                 for(int i = 0; i < objs.length; ++i) {
103                     String key = iHashKey.getKey(objs[i]);
104                     result.put(key, objs[i]);
105                 }
106 
107                 return result;
108             }
109         } else {
110             return null;
111         }
112     }
113 
114     public static HashMap hashlizeMap(List objs, IHashKey iHashKey) {
115         if (objs != null && !objs.isEmpty()) {
116             if (iHashKey == null) {
117                 throw new RuntimeException("iHashKey cann't be null");
118             } else {
119                 HashMap result = new HashMap();
120 
121                 for(int i = 0; i < objs.size(); ++i) {
122                     String key = iHashKey.getKey(objs.get(i));
123                     result.put(key, objs.get(i));
124                 }
125 
126                 return result;
127             }
128         } else {
129             return null;
130         }
131     }
132 
133     public static HashMap hashlizeObjects(Object[] objs, IHashKey iHashKey, ICombine iCombine) {
134         if (objs != null && objs.length != 0) {
135             if (iHashKey == null) {
136                 throw new RuntimeException("iHashKey cann't be null");
137             } else {
138                 HashMap result = new HashMap();
139 
140                 for(int i = 0; i < objs.length; ++i) {
141                     String key = iHashKey.getKey(objs[i]);
142                     Object o = result.get(key);
143                     result.put(key, iCombine.combine(o, objs[i]));
144                 }
145 
146                 return result;
147             }
148         } else {
149             return null;
150         }
151     }
152 
153     public static HashMap hashlizeObjects(List objs, IHashKey iHashKey, ICombine iCombine) {
154         if (objs != null && !objs.isEmpty()) {
155             if (iHashKey == null) {
156                 throw new RuntimeException("iHashKey cann't be null");
157             } else {
158                 HashMap result = new HashMap();
159                 int size = objs.size();
160 
161                 for(int i = 0; i < size; ++i) {
162                     String key = iHashKey.getKey(objs.get(i));
163                     Object o = result.get(key);
164                     result.put(key, iCombine.combine(o, objs.get(i)));
165                 }
166 
167                 return result;
168             }
169         } else {
170             return null;
171         }
172     }
173 
174     public static LinkedHashMap linkedHashlizeObjects(List objs, IHashKey iHashKey, ICombine iCombine) {
175         if (objs != null && !objs.isEmpty()) {
176             if (iHashKey == null) {
177                 throw new RuntimeException("iHashKey cann't be null");
178             } else {
179                 LinkedHashMap result = new LinkedHashMap();
180                 int size = objs.size();
181 
182                 for(int i = 0; i < size; ++i) {
183                     String key = iHashKey.getKey(objs.get(i));
184                     Object o = result.get(key);
185                     result.put(key, iCombine.combine(o, objs.get(i)));
186                 }
187 
188                 return result;
189             }
190         } else {
191             return null;
192         }
193     }
194 
195     public static Set<String> hashlizeSet(List objs, IHashKey iHashKey) {
196         if (CollectionUtils.isEmpty(objs)) {
197             return null;
198         } else if (iHashKey == null) {
199             throw new RuntimeException("iHashKey cann't be null");
200         } else {
201             Set<String> result = new HashSet();
202 
203             for(int i = 0; i < objs.size(); ++i) {
204                 String key = iHashKey.getKey(objs.get(i));
205                 result.add(key);
206             }
207 
208             return result;
209         }
210     }
211 
212     public static List<String> hashlizeList(List objs, IHashKey iHashKey) {
213         if (CollectionUtils.isEmpty(objs)) {
214             return null;
215         } else if (iHashKey == null) {
216             throw new RuntimeException("iHashKey cann't be null");
217         } else {
218             List<String> result = new ArrayList();
219 
220             for(int i = 0; i < objs.size(); ++i) {
221                 String key = iHashKey.getKey(objs.get(i));
222                 result.add(key);
223             }
224 
225             return result;
226         }
227     }
228 }