如何从ArrayList中移除与另一列表不匹配的元素?
移除列表中不匹配元素(保留交集)
没问题,我来帮你搞定这个需求——你要做的其实就是保留两个列表的交集,只留下同时存在于两个列表中的元素,移除仅在单个列表出现的项。下面给你几种实用的实现方式:
方法1:循环遍历判断
最直观的思路就是逐个检查原始列表的元素,把存在于另一个列表中的元素保留下来:
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ListIntersection { public static void main(String[] args) { List<Integer> original = Arrays.asList(1, 2, 3); List<Integer> dummy = Arrays.asList(2, 3); List<Integer> result = new ArrayList<>(); for (Integer num : original) { if (dummy.contains(num)) { result.add(num); } } // 输出结果:[2, 3] System.out.println(result); } }
方法2:使用List的retainAll方法
Java的List自带了retainAll()方法,它会直接修改原列表,只保留与指定集合的交集元素:
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ListIntersection { public static void main(String[] args) { // 注意要将original初始化为ArrayList,避免Arrays.asList返回的固定大小列表报错 List<Integer> original = new ArrayList<>(Arrays.asList(1, 2, 3)); List<Integer> dummy = Arrays.asList(2, 3); original.retainAll(dummy); // 输出结果:[2, 3] System.out.println(original); } }
提示:
Arrays.asList()返回的是一个固定大小的列表,直接调用retainAll()会抛出UnsupportedOperationException,所以需要把它转换成ArrayList再操作。
方法3:Java 8+ Stream API实现
如果你的项目用的是Java 8及以上版本,用Stream来处理会更简洁优雅:
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class ListIntersection { public static void main(String[] args) { List<Integer> original = Arrays.asList(1, 2, 3); List<Integer> dummy = Arrays.asList(2, 3); List<Integer> result = original.stream() .filter(dummy::contains) .collect(Collectors.toList()); // 输出结果:[2, 3] System.out.println(result); } }
内容的提问来源于stack exchange,提问作者user9130953
相关产品推荐
相关产品推荐

