我想要得到以下内容
1. 两个列表之间的共同元素。
2. ListB中ListA中没有的元素
3. ListA中ListB中没有的元素
List<String> fruitsListA = new ArrayList<String>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Grapes");
List<String> fruitsListACopy = fruitsListA;
List<String> fruitsListB = new ArrayList<String>();
fruits.add("Strawberry");
fruits.add("Cranberry");
fruits.add("Orange");
fruits.add("Apple");
List<String> fruitsListBCopy = fruitsListB;
1. common elements between two list
fruitsListACopy.retainAll(fruitsListB);
2. Elements in ListB which is not available in ListA
fruitsListB.removeAll(fruitsListA);
3. Elements in ListA which is not available in ListB
fruitsListA.removeAll(fruitsListBCopy);
情况 1:我能够获取两个列表中的共同项目。所以如果我打印fruitsListACopy它会给出['Apple']
情况2:我可以看到fruitsListA被自动修改,我的意思是它没有所有项目['Apple','Banana','Grapes'],它只有通用项目 ['苹果'] 。
情况 3:我可以看到fruitsListB 被自动修改,我的意思是,它没有包含所有项目 ['Strawberry','Cranberry','Orange','Apple']
['草莓'、'蔓越莓'、'橙子'] 删除了苹果的 coomon 项目。
我什至可以看到fruitsListA被自动修改,我的意思是它没有所有项目['Apple','Banana','Grapes'],它只有通用项目
['苹果'] 。
当我使用removeAll和retainAll方法时,复制列表中所做的更改会反射(reflect)在原始列表中。
还有其他最好的方法来满足这个需求吗?
最佳答案
创建一个新实例,而不是将同一对象分配给另一个引用。
例如,您可以替换:
List<String> fruitsListACopy = fruitsListA;
由
List<String> fruitsListACopy = new ArrayList<>(fruitsListA);
如果您不希望在复制列表上的操作之间产生副作用,则必须在对原始列表执行每个操作之前创建原始列表的新副本。
然后,您必须在复制的列表上调用 retainAll()
和 removeAll()
并将原始列表作为参数提供给方法。
这是一个示例代码来说明:
public static void main(String[] args) {
List<String> fruitsListA = new ArrayList<String>();
fruitsListA.add("Apple");
fruitsListA.add("Banana");
fruitsListA.add("Grapes");
List<String> fruitsListB = new ArrayList<String>();
fruitsListB.add("Strawberry");
fruitsListB.add("Cranberry");
fruitsListB.add("Orange");
fruitsListB.add("Apple");
// copy for A
List<String> fruitsListACopy = new ArrayList<>(fruitsListA);
fruitsListACopy.retainAll(fruitsListB);
// handle the result of fruitsListACopy
System.out.println("fruitsListACopy="+fruitsListACopy);
// copy for B
List<String> fruitsListBCopy = new ArrayList<>(fruitsListB);
fruitsListBCopy.removeAll(fruitsListA);
// handle the result of fruitsListBCopy
System.out.println("fruitsListBCopy="+fruitsListBCopy);
// copy for A
fruitsListACopy = new ArrayList<>(fruitsListA);
fruitsListACopy.removeAll(fruitsListB);
// handle the result of fruitsListACopy
System.out.println("fruitsListACopy="+fruitsListACopy);
}
输出:
fruitsListACopy=[Apple]
fruitsListBCopy=[Strawberry, Cranberry, Orange]
fruitsListACopy=[Banana, Grapes]
关于java - java中查找两个List之间的共同和不同元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43181154/