package com.srs.common.utils;

import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * @author zhy
 * @date 2023-08-18 9:55
 * @description 列表方法
 */
public class listFunc {

    /**
     * 两个列表的差集
     * @author zhy
     * @date 2023-08-18 09:56:19
     * @param list1
     * @param list2
     * @return
     **/
    public static List<String> subList1(List<String> list1, List<String> list2) {
        Map<String, String> tempMap = list2.parallelStream().collect(Collectors.toMap(Function.identity(), Function.identity(), (oldData, newData) -> newData));
        return list1.parallelStream().filter(str->{
            return !tempMap.containsKey(str);
        }).collect(Collectors.toList());
    }

    /**
     * 获取需要添加的元素（在list1中存在但在list2中不存在的元素）
     * @param list1 待导入的列表
     * @param list2 已存在的列表
     * @return 需要添加的元素列表
     */
    public static List<String> subList(List<String> list1, List<String> list2) {
        List<String> result = new ArrayList<>();
        Set<String> set2 = new HashSet<>(list2); // 使用HashSet提高查找效率

        for (String item : list1) {
            if (!set2.contains(item)) {
                result.add(item);
            }
        }
        return result;
    }


    /**
     * 获取需要修改的元素（两个列表中都存在的元素）
     * @param list1 待导入的列表
     * @param list2 已存在的列表
     * @return 需要修改的元素列表
     */
    public static List<String> intersectList(List<String> list1, List<String> list2) {
        List<String> result = new ArrayList<>();
        Set<String> set2 = new HashSet<>(list2); // 使用HashSet提高查找效率

        for (String item : list1) {
            if (set2.contains(item)) {
                result.add(item);
            }
        }
        return result;
    }


}
