【发布时间】:2018-04-30 08:05:39
【问题描述】:
如何在 Java 中对 ArrayList 执行脏检查?
我有一个对象
Animal
{
String animalName;
String animalType;
String animalPlace
}
我有两个列表:
List<Animal> animalList1 = new ArrayList<Animal>();
List<Animal> animalList2 = new ArrayList<Animal>();
在第一个列表中, 我有价值观:
[0][lion,Carnivorous,Africa]
[1][tiger,Carnivorous,Zambia]
[2][Goat,Herbivorous,Zimbabwe]
在第二个列表中, 我有价值观:
[0][lion,Carnivorous,Africa]
[1][tiger,Carnivorous,Zambia]
[2][Goat,Herbivorous,Norway]
在第二个列表中,
索引 2 处元素的 animalPlace 已从津巴布韦更改为挪威。
如何比较两个列表值,并且更改的值将该对象放在单独的列表中?
List<Animal> animalList3 = new ArrayList<Animal>();
[0] [Goat,Herbivorous,Norway]
我知道使用 for 循环比较列表的传统方法:
for (int i = 0; i < list1.size(); i++)
{
for (int j = i+1; j < list2.size(); j++)
{
// compare list1 and list2 values
}
}
有没有更快和/或更好的方法?
【问题讨论】:
-
实现
equals()方法并保留唯一的方法 -
好吧,看来您想比较 list1[i] 和 list2[i]。这不是您的嵌套循环所做的。正确地做到这一点已经快得多了。从寻找正确的解决方案开始。如果不够快,则进行优化。
-
正如@azro 所说,实现equals。那么您可以使用以下内容:
list1.stream().filter(a -> list2.stream().anyMatch(a2 -> a2.equals(a))).collect(Collectors.toList()); -
@JBNizet 是的,我需要比较两个列表
标签: java arraylist java-8 dirtyread