java比较两个不同列表中不同对象的元素
我会发布我的代码,但只是更改名称。当我可以添加更多信息时,我会添加评论
List<AbstractA> foo = bar.getFoo; // This returns an ArrayList<E> with two objects. Each object has an ID and Price.
List<Name> names = null;
try{
names = someClass.getNames(); // This returns an ArrayList<E> with 10 Name objects. Each one has an ID, name, description
}catch(Exception e){
Log.warn(e);
}
我的主要目标是比较这两个列表。我有
Iterator<Name> object = names.iterator();
while(object.hasNext()){
Name j = object.next(); // assign next name
System.out.println("j.getId(): " + j.getId()); // This provides me the Id
System.out.println("foo.contains(j.getId()) " + foo.contains(j.getId())); // Keeps spitting out false but I want it to be true
if(foo.contains(j.getId())){
object.remove(); //remove name out of Names list
}
}
我不确定这是否对我的努力有很大意义。 这个程序中有两个bean代表foo和name。所以它们是不同的对象,我认为这可能是问题所在
有什么建议吗?抱歉,如果这是非常模糊的
我的主要问题是,如果我想比较这两个列表中的一个元素,最好的方法是什么
# 1 楼答案
List.contains(...)使用equals()进行比较:
equals()不要求两个对象是同一个类,因此可以这样重写它:
您可能希望为这两个函数重写equals(),以便a.equals(b)==b.equals(a)
如果您发现自己经常这样做,那么它们都实现的抽象类可能会有所帮助
# 2 楼答案
foo
是List<AbstractA>
,而j.getId()
是(我猜)一个String
。由于^{equals
方法,除非您以一种奇怪的方式定义AbstractA.equals
,否则这永远不会是true
最好是编写自己的方法来遍历列表并进行比较。你可以使用
Guava
,但仅此就太过分了# 3 楼答案
你可能想要两张地图而不是列表
对于
foo
:对于
names
:然后你可以比较钥匙(在你的情况下是id)
我希望我没听错