List集合合并指定数据

来源:互联网 发布:监控硬盘覆盖数据恢复 编辑:程序博客网 时间:2024/05/16 14:14
/**
     * 根据指定字段合并数据,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()));
    }

0 0
原创粉丝点击