1. 程式人生 > >set交集差集處理

set交集差集處理

package utils.bianliangtestutils;

import com.alibaba.fastjson.JSONObject;
import pojo.RiskParamPOJO;

import java.sql.SQLException;
import java.util.*;

/**
 * by zfy
 * 2018/9/22
 */
public class SetUtil<T> {

    /**
     *  判斷A是否被B完全包含,如果包含則返回true,否則返回false,並且列印沒有被包含的變數
     * @param A  待驗證的變數集  例如京東信用分的變數集
     * @param B  所有變數的set,  例如分開節點3150呼叫策略引擎的引數key集
     * @return  boolean
     */
    public boolean BContainsA(HashSet<T> A, HashSet<T> B){
        //A 和 B 的交集
        HashSet<T> jiaoji = new HashSet<>();
        jiaoji.addAll(A);
        jiaoji.retainAll(B);
        //A B 的交集size 等於 A的size 說明 B完成包含A
        boolean result = false;

        if (jiaoji.size() == A.size()){
            result = true;
        }else {
            System.out.println("====以下差異結果=====");
            System.out.println("第一個Set==" + A.toString());
            System.out.println("第二個Set==" + B.toString());
            System.out.println("第一個set不在第二個set中的部分:" + chajiSet(A,B));
            System.out.println("第二個set不在第一個set中的部分:" + chajiSet((HashSet<T>) B,A));
        }
        return result;
    }

    /**
     *
     * @param A
     * @param B
     * @return 返回A-B的結果集 即 A不在B中的部分
     */
    public HashSet<T> chajiSet(HashSet<T> A, HashSet<T> B){
        //A與B的差集
        HashSet<T> chaji = new HashSet<>();
        chaji.addAll(A);
        chaji.removeAll(B);
        return chaji;
    }

    /**
     *
     * @param A
     * @param B
     * @return  返回A與B的交集集 即 A在B中的部分
     */
    public HashSet<T> jiaojiSet(HashSet<T> A, HashSet<T> B){
        //A與B的差集
        HashSet<T> chaji = new HashSet<>();
        chaji.addAll(A);
        chaji.retainAll(B);
        return chaji;
    }

    public HashSet<String> keyStartWith(HashSet<String> paraSet, String startStr){
        HashSet<String> result = new HashSet<>();
        Iterator<String> iterator = paraSet.iterator();
        while (iterator.hasNext()){
            String next = iterator.next();
            if (next.startsWith("zr")){
                result.add(next);
            }
        }
        return result;
    }



}