烟台北京网站建设,凡科商城官网旗舰店,龙岗坪地网站建设公司,dw网站制作效果怎么做文章目录 方式一、jdk8 Stream求交集、并集、差集方式二、求交集方式三、collections4.CollectionUtils求交集、差集、并集 本文总结一下java中获取两个List之间的交集、补集、并集的几种方式。 最常用的通过for循环遍历两个集合的方式在这里就不整理了#xff0c;主要整理一些… 文章目录 方式一、jdk8 Stream求交集、并集、差集方式二、求交集方式三、collections4.CollectionUtils求交集、差集、并集 本文总结一下java中获取两个List之间的交集、补集、并集的几种方式。 最常用的通过for循环遍历两个集合的方式在这里就不整理了主要整理一些已经封装或提供出来的方法。
方式一、jdk8 Stream求交集、并集、差集 利用jdk8的新特性Stream流进行求交集、并集、差集。 import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;public class Test {public static void main(String[] args) {ListString list1 new ArrayList(Arrays.asList(a,b,c));ListString list2 new ArrayList(Arrays.asList(b,c,d));System.out.println(交集intersect(list1,list2));System.out.println(差集minus(list1,list2));System.out.println(并集union(list1,list2));}/*** 交集* param list1* param list2* return*/private static ListString intersect(ListString list1, ListString list2) {ListString intersect list1.stream().filter(item - list2.contains(item)).collect(Collectors.toList());return intersect;}/*** 差集list1-list2* param list1* param list2* return*/private static ListString minus(ListString list1, ListString list2) {ListString minus list1.stream().filter(item - !list2.contains(item)).collect(Collectors.toList());return minus;}/*** 并集不去重* param list1* param list2* return*/private static ListString unionAll(ListString list1, ListString list2) {list1.addAll(list2);return list1;}/*** 并集去重* param list1* param list2* return*/private static ListString union(ListString list1, ListString list2) {list1.addAll(list2);return list1.stream().distinct().collect(Collectors.toList());}
}
执行结果
交集[b, c]
差集[a]
并集[a, b, c, d]方式二、求交集 利用ArrayList提供的方法求交集。 方法含义备注boolean retainAll求两个list的交集list1.retainAll(list2)注意此操作会直接删除list1中的元素
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;public class Test {public static void main(String[] args) {ListString list1 new ArrayList(Arrays.asList(a,b,c));ListString list2 new ArrayList(Arrays.asList(b,c,d));// boolean retainAll 删除两个集合不同的元素// 注意此操作会直接删除list1中的元素System.out.println(list1.retainAll(list2));System.out.println(集合1list1);System.out.println(集合2list2);}
}执行结果
true
集合1[b, c]
集合2[b, c, d]list1.retainAll(list2), 调用完成后, list1 中不在 list2 的元素都会被剔除, 此时 list1 就是交集
方式三、collections4.CollectionUtils求交集、差集、并集 利用org.apache.commons.collections4.CollectionUtils类中的方法求交集 方法含义CollectionUtils.intersection(list1,list2)求两个list的交集即共有的部分CollectionUtils.union(list1,list2)取并集去重CollectionUtils.subtract(list1,list2)取差集给定俩集合A、B,由所有属于A且不属于B的元素组成的集合,叫做集合A减集合B(或集合A与集合B之差)CollectionUtils.disjunction(list1,list2)取交集的补集。(补集一般指绝对补集即一般地设S是一个集合A是S的一个子集由S中所有不属于A的元素组成的集合叫做子集A在S中的绝对补集)
引入依赖
dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-collections4/artifactIdversion4.4/version
/dependencyimport org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ArrayUtils;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;public class Test {public static void main(String[] args) {ListString list1 new ArrayList(Arrays.asList(a,b,c));ListString list2 new ArrayList(Arrays.asList(b,c,d));//intersection: 取交集ListString sameList CollectionUtils.intersection(list1,list2).stream().collect(Collectors.toList());System.out.println(交集sameList);//取并集去重System.out.println(并集 ArrayUtils.toString(CollectionUtils.union(list1,list2)));//取差集System.out.println(差集CollectionUtils.subtract(list1,list2));//取两个集合的交集的补集(补集一般指绝对补集即一般地设S是一个集合A是S的一个子集由S中所有不属于A的元素组成的集合叫做子集A在S中的绝对补集)System.out.println(补集CollectionUtils.disjunction(list1,list2));}}执行结果
交集[b, c]
并集[a, b, c, d]
差集[a]
补集[a, d]