gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:11:32 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com