1、构造List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();用来存放数据此处略,其中用IMPCNYNAME表示国别名称,CDCDE表示税号
2、按税号排序用
Collections.sort(list,new Comparator<Map<String,Object>>(){
@Override
public int compare(Map<String,Object>o1, Map<String,Object> o2) {
// 返回值为int类型,大于0表示正序,小于0表示逆序
return ((String)o2.get("CDCDE")).compareTo((String)o1.get("CDCDE"));
}
});
3、具体算法实现如下
/**
* 算法思想:先对数据进行分组,然后对同组数据排序编号,重新组装导出的集合
* 具体步骤:见如下注释 //1 && //2
*
*/
//groupByMap存放分组的结果
Map<String,List<Map<String,Object>>> groupByMap = new LinkedHashMap<String,List<Map<String,Object>>>();
//1、对数据进行分组
for(Map<String,Object> map : list){
String cnyCNa = (map!=null && map.get("IMPCNYNAME")!=null) ? String.valueOf(map.get("IMPCNYNAME")) : "";
String cdCde = (map!=null && map.get("CDCDE")!=null) ? String.valueOf(map.get("CDCDE")) : "";
String key = cnyCNa.concat(cdCde);
if(!groupByMap.containsKey(key)){
List<Map<String,Object>> subMapList = new ArrayList<Map<String,Object>>();
subMapList.add(map);
groupByMap.put(key, subMapList);
}else{
List<Map<String,Object>> subMapList = groupByMap.get(key);
subMapList.add(map);
groupByMap.put(key, subMapList);
}
}
//2、最后对分组后同组数据排序编号,重新组装导出的集合
//items用来重新组装导出的集合
List<Map<String,Object>> items = new ArrayList<Map<String,Object>>();
for(String key : groupByMap.keySet()){
List<Map<String, Object>> subItems = groupByMap.get(key);
if(subItems!=null){
//若分组后同组数据个数为1
if(subItems.size()==1){
Map<String,Object> itemMap = subItems.get(0);
itemMap.put("CIXU", "D1");
items.add(itemMap);
}else{
//若分组后同组数据个数超过1,则对同组数据进行编号
int count = 0;
for(Map<String,Object> map : subItems){
count++;
map.put("CIXU", "C"+count);
items.add(map);
}
}
}
}