Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从arrayList中删除唯一元素_Java_Collections - Fatal编程技术网

Java 如何从arrayList中删除唯一元素

Java 如何从arrayList中删除唯一元素,java,collections,Java,Collections,我有两个列表,其中一个列表的值是1,2,3 另一份清单2,3 我想删除两个列表中不匹配的值 2和3在两个列表中都匹配,那么1在两个列表中都不匹配,所以我想删除该值 List original = [1,2,3]; List dummy = [2,3]; 如果可以改为使用集合,则只需获得集合之间的交集(): 设置s1; 设s2; s1.保留(s2);//s1现在只包含两个集合中的元素 当然,对于集合,您不能有重复项,并且您将失去顺序。如果可以使用集合代替,那么您只需获得集合之间的交集():

我有两个列表,其中一个列表的值是1,2,3

另一份清单2,3

我想删除两个列表中不匹配的值

2和3在两个列表中都匹配,那么1在两个列表中都不匹配,所以我想删除该值

List original = [1,2,3];

List dummy = [2,3];

如果可以改为使用集合,则只需获得集合之间的交集():

设置s1;
设s2;
s1.保留(s2);//s1现在只包含两个集合中的元素

当然,对于集合,您不能有重复项,并且您将失去顺序。

如果可以使用集合代替,那么您只需获得集合之间的交集():

设置s1;
设s2;
s1.保留(s2);//s1现在只包含两个集合中的元素

当然,对于集合,您不能有重复项,并且您将失去顺序。

如果您使用的是Java 8+,您可以使用:

original.removeIf(a -> !dummy.contains(a));

下面是一个Java10的示例

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]
var original=newarraylist(1,2,3,4的列表);
var dummy=新的ArrayList(列表(2,4,3));
original.removeIf(a->!dummy.contains(a));
系统输出打印号(原件);
->[2, 3, 4]

如果您使用的是Java 8+,则可以使用:

original.removeIf(a -> !dummy.contains(a));

下面是一个Java10的示例

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]
var original=newarraylist(1,2,3,4的列表);
var dummy=新的ArrayList(列表(2,4,3));
original.removeIf(a->!dummy.contains(a));
系统输出打印号(原件);
->[2, 3, 4]

您不需要使用
集合来实现您的需求。
使用
集合
中定义的任何
列表
实现实现的
retainal()
,例如:

List<Integer> original = new ArrayList<>(Arrays.asList(1,2,3));
List<Integer> dummy = Arrays.asList(2,3);

original.retainAll(dummy);
System.out.println(original);
List original=newarraylist(Arrays.asList(1,2,3));
List dummy=Arrays.asList(2,3);
原始。保留(虚拟);
系统输出打印号(原件);
输出:

[2,3]


您不需要使用
集合来实现您的需求。
使用
集合
中定义的任何
列表
实现实现的
retainal()
,例如:

List<Integer> original = new ArrayList<>(Arrays.asList(1,2,3));
List<Integer> dummy = Arrays.asList(2,3);

original.retainAll(dummy);
System.out.println(original);
List original=newarraylist(Arrays.asList(1,2,3));
List dummy=Arrays.asList(2,3);
原始。保留(虚拟);
系统输出打印号(原件);
输出:

[2,3]


如果
dummy
的值不在
original
中,该怎么办?你也想得到这些吗?到目前为止你尝试了什么?如果
dummy
的值不在
original
中怎么办?你也想得到这些吗?到目前为止你尝试了什么?一个
LinkedHashSet
甚至可以维持插入顺序。而且复制品似乎没有被构思出来。因此,这确实是一个很好的解决方案。这个答案改变了需求(如果两个列表包含
1
,则不会要求我们只有一个1作为结果),它还改变了元素顺序。问题是“我想删除两个列表中不匹配的值”。@davidxxx在回答中已经明确说明了这一点,但感谢您强调,ga
LinkedHashSet
甚至可以保持插入顺序。而且复制品似乎没有被构思出来。因此,这确实是一个很好的解决方案。这个答案改变了需求(如果两个列表包含
1
,则不会要求我们只有一个1作为结果),它还改变了元素顺序。问题是“我想删除两个列表中不匹配的值”。@davidxxx这一点在答案中已经明确说明,但感谢您的强调