1. 程式人生 > >資料對比去重公共類

資料對比去重公共類

package com.cattsoft.project.fzp.comm.util;

import com.cattsoft.comm.tools.StringUtil;

import java.util.*;

public class ContrastDataUtil {

    /**
     * 把firstList跟secondList對比,找出firstList資料中跟secondList不一樣的記錄
     * @param firstList  List<Map<String, Object>>
     * @param secondList  List<Map<String, Object>>
     * @param cols 要對比的欄位
     * @return 返回值
     */
    public static List<Map<String, Object>> contrastData(List<Map<String, Object>> firstList , List<Map<String, Object>> secondList, String[] cols){
        List<Map<String, Object>> resultList = new ArrayList<Map<String,Object>>();
        Set<String> fullSet = new HashSet<String>(secondList.size());//獲取總的key值
        for(Map<String, Object> rowMap : secondList){
            StringBuilder key = new StringBuilder();
            for (int i = 0; i < cols.length; i++) {
                String value = StringUtil.toString(rowMap.get(cols[i]));
                if(i == cols.length-1){
                    key.append(value);
                }else {
                    key.append(value).append("_");
                }
            }
            fullSet.add(key.toString());
        }

        for(Map<String, Object> rowMap : firstList){
            StringBuilder key = new StringBuilder();
            for (int i = 0; i < cols.length; i++) {
                String value = StringUtil.toString(rowMap.get(cols[i]));
                if(i == cols.length-1){
                    key.append(value);
                }else {
                    key.append(value).append("_");
                }
            }
            if(!fullSet.contains(key.toString())){
                resultList.add(rowMap);
                fullSet.add(key.toString());//去重
            }
        }
        return resultList;
    }
}