* 根据指定字段合并数据,PageData为HashMap
* @param pgList
* @param fields 指定字段,可以用 Arrays.asList("SEX","AGE")来传值;
* @return
*/
public static List<PageData> analysisPageData(List<PageData> pgList, List<String> fields){
List<PageData> resultList = null;
if(fields==null || fields.isEmpty()){//未指定判定字段,直接返回源数据
resultList = pgList;
} else {
if(pgList!=null && !pgList.isEmpty()){
int mergedIndex = -1;//合并后序号
int originalIndex = 0;//未合并前原始序号
PageData preObj = null;
List<PageData> childs = null;
resultList = new ArrayList<PageData>();
for (PageData pd : pgList) {
pd.put("rowNums", originalIndex);
originalIndex++;
if(preObj==null || !preObj.equals(pd, fields)){
preObj = pd;
childs = new ArrayList<PageData>();
pd.put("childs", childs);
resultList.add(pd);
mergedIndex++;
} else {
childs.add(pd);
}
pd.put("indexs", mergedIndex);
}
}
}
return resultList;
}
//pageData 中重写了equals方法
/**
* 判断两个对象指定字段值是否一致
* @param pd
* @param fields
* @return
*/
public boolean equals(PageData pd, List<String> fields) {
boolean isEqual = true;
if(pd!=null && fields!=null && !fields.isEmpty()){
for (String field : fields) {
isEqual = isEqual && this.isEqual(this.getString(field), pd.getString(field));
}
}
return isEqual;
}
/**
* 判断两个字符串是否一致
* @param str1
* @param str2
* @return
*/
private boolean isEqual(String str1, String str2) {
boolean isAllNull = (str1==null && str2==null);
boolean isAllEmpty = (str1!=null && str1.trim().equals("") && str2!=null && str2.trim().equals(""));
return isAllNull || isAllEmpty || (str1!=null && str2!=null && str2.trim().equals(str1.trim()));
}