在应用开发的时候,我们有时候会遇到需要对一个给定集合进行分组的情况。如果该集合的数据记录是从数据库的获取,通常我们最简单的方案是直接在sql层面select后group by完成。 但是,假如某些场景下该数据不是从数据库获取呢?那就需要在应用程序层面进行分组。
假设给定一个集合,{A:5,A:4,A:3,B:6,B:7}, 需要对其进行分组,使其结果是 {A:[5,4,3],B:[6,7]}。
下面是常规的写法:
//1)对集合进行分组
public Map<String,List<TspPefScoreCalTotal>> groupListByFields(List<TspPefScoreCalTotal> list){
Map<String,List<TspPefScoreCalTotal>> resultMap = new HashMap<String,List<TspPefScoreCalTotal>>();
String groupKey = null;
for(TspPefScoreCalTotal obj : list){
groupKey = formatGroupKeyByFields(obj);
if (resultMap.containsKey(groupKey)) {
resultMap.get(groupKey).add(obj);
} else {
List<TspPefScoreCalTotal> pefScoreCalTotalList = new ArrayList<TspPefScoreCalTotal>();
pefScoreCalTotalList.add(obj);
resultMap.put(groupKey, pefScoreCalTotalList);
}
}
return resultMap;
}
//2)构造分组的关键字