Java中两个集合怎么取差集
在Java中,如果我们想要获取两个集合的差集,即获取在第一个集合中出现但不在第二个集合中出现的元素,可以使用以下几种方法来实现。
方法一:使用retainAll方法
Java中的Collection接口提供了retainAll方法,该方法用于从当前集合中移除所有不在指定集合中的元素,从而得到两个集合的差集。具体示例代码如下:
List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
List<Integer> list2 = new ArrayList<>(Arrays.asList(4, 5, 6, 7, 8));
list1.retainAll(list2);
System.out.println("差集:" + list1);
上述代码中,我们创建了两个ArrayList集合list1和list2,并分别初始化了一些元素。然后,我们调用list1的retainAll方法,将list2作为参数传入,该方法会从list1中移除所有不在list2中的元素,最终得到的list1就是两个集合的差集。
方法二:使用Stream API
Java 8引入了Stream API,我们可以使用该API中的filter方法来过滤集合元素,从而得到差集。具体示例代码如下:
List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
List<Integer> list2 = new ArrayList<>(Arrays.asList(4, 5, 6, 7, 8));
List<Integer> diff = list1.stream()
.filter(e -> !list2.contains(e))
.collect(Collectors.toList());
System.out.println("差集:" + diff);
上述代码中,我们使用Stream API中的filter方法来过滤list1的元素,只保留不在list2中出现的元素。最后,使用collect(Collectors.toList())方法将过滤结果收集到一个新的List集合中,即得到两个集合的差集。
方法三:使用Apache Commons Collections库
Apache Commons Collections库是一个常用的Java工具库,提供了许多操作集合的工具类。我们可以使用CollectionUtils类中的subtract方法来获取两个集合的差集。具体示例代码如下:
List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
List<Integer> list2 = new ArrayList<>(Arrays.asList(4, 5, 6, 7, 8));
List<Integer> diff = (List<Integer>) CollectionUtils.subtract(list1, list2);
System.out.println("差集:" + diff);
上述代码中,我们使用CollectionUtils类中的subtract方法,将list1和list2作为参数传入。该方法会返回一个新的集合,其中包含list1中存在但list2中不存在的元素,即得到两个集合的差集。
总结一下,我们可以使用 retainAll 方法、Stream API 或者 Apache Commons Collections库中的 subtract 方法来取两个集合的差集。这些方法都很简单易用,根据实际情况选择合适的方法即可。