简单说一下集合求并集、差集以及交集方法。常用方法就是集合api与jdk8中stream流.下面已案例的形式简单说下使用以及区别.
public static void main(String[] args) {
ArrayList<Integer> integers = new ArrayList<>();
integers.add(1);
integers.add(2);
integers.add(3);
ArrayList<Integer> integers1 = new ArrayList<>();
integers1.add(1);
integers1.add(2);
// 取交集
method1(integers, integers1);
// 取差集
method2(integers, integers1);
// 取并集
method3(integers, integers1);
}
求交集
private static void method1(ArrayList<Integer> integers, ArrayList<Integer> integers1) {
// retainAll方法求交集
integers.retainAll(integers1); // 1,2
System.out.println(integers); // 1,2
System.out.println(integers1); // 1,2
// stream方式求交集
List<Integer> collect = integers.stream().filter(s -> integers1.contains(s)).collect(Collectors.toList());
System.out.println(collect); // 1,2
}
求差集
private static void method2(ArrayList<Integer> integers, ArrayList<Integer> integers1) {
// removeAll方法求差集
integers.removeAll(integers1);
System.out.println(integers); // 3
System.out.println(integers1); // 1 2
// stream方式求差集
List<Integer> collect = integers.stream().filter(s -> !integers1.contains(s)).collect(Collectors.toList());
System.out.println(collect); // 3
}
求并集
private static void method3(ArrayList<Integer> integers, ArrayList<Integer> integers1) {
integers.addAll(integers1);
System.out.println(integers); // 1 2 3 1 2
System.out.println(integers1); // 1 2
integers1.addAll(integers);
System.out.println(integers1); // 1 2 3 1 2
System.out.println(integers); // 1 2
}
区别:retainAll或是removeAll的方式会将求交(差)集之后的元素都赋值给集合,也就是说原集合元素是被破坏的,并且需要注意两个集合之前的调用顺序,如果调用位置不同返回的结果也是不一样的;jdk8的stream流求交集的方式就能保证原集合的数据完整性!