java - 如何遍历 2 个列表并检查一个元素的内容是否与不同列表中的另一个元素相同?

标签 java list arraylist

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/

相关文章:

java - 如何检查对象 ArrayList 是否包含没有循环的对象的单个属性

java - 如何获取列表列表中的某个元素?

java - 将实体的元素添加到同一实体 - @OneToMany

java - 未使用原始类型时发生原始类型错误

java - Struts 2 中重定向到另一个参数数量未知的操作

java - 创建测试基页以调用所需功能

java - 添加到检索到的 ArrayList

java - 如何允许在两个地方/循环中使用这个变量 ch?

Java - 包含对原始列表的引用的克隆列表

java - rest 是否支持对象数组列表?