一、问题背景
在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 }