private List<Actor> actors = new ArrayList<>();
public void addActors(Movie x)
{
if(actors.isEmpty())
{
actors.addAll(x.getListOfActors());
}
else
{
List<Actor> movieActors = x.getListOfActors();
ArrayList<Actor> tempActors= new ArrayList<Actor>();
for(int z = 0 ; z <actors.size(); z++)
{
for(int n = 0 ; n <movieActors.size();n++)
{
if(actors.get(z).getName().equals(movieActors.get(n).getName()))
actors.get(z).addCount(); // actor count
else
{
tempActors.add(movieActors.get(n));
}
}
}
actors.addAll(tempActors);
}
}
因此每个电影对象都有一个 Actor 列表。每个 Actor 对象都有一个初始化为 1 的 int count 对象。我运行的所有内容 addActors(Movie x), 我想检查电影 x 中是否有 Actor 列表中的 Actor 。如果有,我想将计数增加 1,否则只需将其添加到 Actor 列表中即可。这是我目前的做法,我意识到这是错误的,但我不知道如何解决。我运行该方法两次或更多次,由于 actor.addAll(tempActors),重复的 Actor 将被添加到 Actor 列表中。有更好的方法吗?
更新:所以问题不在于字符串比较。即使我使用 .equals,这也不是我想要的结果。 示例测试用例:
电影:《冰雪奇缘》
Actor :克里斯汀·贝尔、伊迪娜·门泽尔、乔纳森·格罗夫、乔什·加德
电影:《老板》
Actor :梅丽莎·麦卡西、克里斯汀·贝尔、彼特·丁拉基、艾拉·安德森
所以如果我在这两部电影上使用 addActors(movie x) ,每个 Actor 应该只出现一次。在 Actor 名单中。克里斯汀·贝尔的计数现在应该是 2。其他人都是 1。(计数是他们参演的电影数量)
但是,当我对这两部电影运行此方法时,我的 Actor 列表现在包含:
克里斯汀·贝尔 伊迪娜·门泽尔 乔纳森·格罗夫 乔什·加德 梅丽莎·麦卡锡 彼特·丁拉基 埃拉·安德森 梅丽莎·麦卡锡 克里斯汀·贝尔 彼特·丁拉基 埃拉·安德森 梅丽莎·麦卡锡 克里斯汀·贝尔 彼特·丁拉基 埃拉·安德森 梅丽莎·麦卡锡 克里斯汀·贝尔 彼特·丁拉基 艾拉·安德森
(抱歉解释太长,我不知道还能如何解释)
最佳答案
删除其他条件中的所有内容并替换为以下代码。虽然它不是最佳解决方案,但可能会满足您的目的。
else {
List<Actor> movieActors = (List<Actor>) x.getListOfActors();
for (int z = 0; z < x.getListOfActors().size(); z++) {
Actor actor = movieActors.get(z);
if (actors.contains(actor)) {
actors.get(actors.indexOf(actor)).addCount();
}else{
actors.add(actor);
}
}
}
你必须重写 Actor 类中的 equals 方法
@Override
public boolean equals(Object obj) {
if(obj instanceof Actor){
Actor a = (Actor)obj;
if(this.name.equals(a.name)){
return true;
}
}
return false;
}
关于java - 如何遍历 2 个列表并检查一个元素的内容是否与不同列表中的另一个元素相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40967979/