两个List集合取交集

时间:2025-02-21 07:25:30

两个List集合取交集、并集、差集、去重并集的一个简单Demo,可供参考:

import ;
import ;
import static ;
 
 
public class Test {
 
    public static void main(String[] args) {
        List<String> list1 = new ArrayList<String>();
        ("1");
		("2");
		("3");
		("5");
		("6");
 
        List<String> list2 = new ArrayList<String>();
        ("2");
		("3");
		("7");
		("8");
 
        // 交集
        List<String> intersection = ().filter(item -> (item)).collect(toList());
        ("---交集 intersection---");
        ().forEach( :: println);
 
        // 差集 (list1 - list2)
        List<String> reduce1 = ().filter(item -> !(item)).collect(toList());
        ("---差集 reduce1 (list1 - list2)---");
        ().forEach( :: println);
 
        // 差集 (list2 - list1)
        List<String> reduce2 = ().filter(item -> !(item)).collect(toList());
        ("---差集 reduce2 (list2 - list1)---");
        ().forEach( :: println);
 
        // 并集
        List<String> listAll = ().collect(toList());
        List<String> listAll2 = ().collect(toList());
        (listAll2);
        ("---并集 listAll---");
        ().forEachOrdered( :: println);
 
        // 去重并集
        List<String> listAllDistinct = ().distinct().collect(toList());
        ("---得到去重并集 listAllDistinct---");
        ().forEachOrdered( :: println);
 
        ("---原来的List1---");
        ().forEachOrdered( :: println);
        ("---原来的List2---");
        ().forEachOrdered( :: println);
 
    }
}

private static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
        Map<Object, Boolean> seen = new ConcurrentHashMap<>();
        return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
    }


    public static void main(String[] args) {
        List<String> list=new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);

        List<Integer> list2=new ArrayList<>();
        list.add(1);
        list.add(6);
        list.add(6);
        list.add(7);

        list.addAll(list2);
        list = list.stream().filter(distinctByKey(Integer::intValue)).collect(Collectors.toList());
        System.out.println(list);
    }