我有两个列表,一个列表中的值是1,2,3
另一个清单2,3
我想删除两个列表中不匹配的值。
2和3在两个列表中都匹配,然后在两个列表中都没有匹配,所以我想删除该值。
List original = [1,2,3];
List dummy = [2,3];
答案 0 :(得分:3)
如果可以使用集合,那么你可以只获得集合之间的交集(info):
Set<String> s1;
Set<String> s2;
s1.retainAll(s2); // s1 now contains only elements in both sets
当然,套装不能重复,您将失去订购。
答案 1 :(得分:1)
您不需要使用Set
来满足您的要求
使用retainAll()
中定义的任何Collection
实现实现的List
,例如:
List<Integer> original = new ArrayList<>(Arrays.asList(1,2,3));
List<Integer> dummy = Arrays.asList(2,3);
original.retainAll(dummy);
System.out.println(original);
输出:
[2,3]
答案 2 :(得分:0)
如果您使用的是Java 8+,则可以使用:
original.removeIf(a -> !dummy.contains(a));
以下是Java 10的示例
var original = new ArrayList<>(List.of(1, 2, 3, 4));
var dummy = new ArrayList<>(List.of(2, 4, 3));
original.removeIf(a -> !dummy.contains(a));
System.out.println(original);
->[2, 3, 4]