Java 如何遍历2个列表并检查同一列表中的一个元素的内容是否与不同列表中的另一个元素的内容相同? private List actors=new ArrayList(); 公众演员(电影x) { if(actors.isEmpty()) { actors.addAll(x.getListOfActors()); } 其他的 { List movieActors=x.getListOfActors(); ArrayList tempActors=新的ArrayList(); 对于(intz=0;z

Java 如何遍历2个列表并检查同一列表中的一个元素的内容是否与不同列表中的另一个元素的内容相同? private List actors=new ArrayList(); 公众演员(电影x) { if(actors.isEmpty()) { actors.addAll(x.getListOfActors()); } 其他的 { List movieActors=x.getListOfActors(); ArrayList tempActors=新的ArrayList(); 对于(intz=0;z,java,list,arraylist,Java,List,Arraylist,当您这样做时 actors.get(z).getName()==movieActors.get(n).getName() 我假设名称是一个字符串,在这种情况下,对于相同的名称,它将不是真的。您需要这样做 actors.get(z).getName().equals(movieActors.get(n).getName()) 执行此操作时请参阅- actors.get(z).getName()==movieActors.get(n).getName() 我假设名称是一个字符串,在这种情况下,对于相

当您这样做时

actors.get(z).getName()==movieActors.get(n).getName()

我假设名称是一个字符串,在这种情况下,对于相同的名称,它将不是真的。您需要这样做

actors.get(z).getName().equals(movieActors.get(n).getName())

执行此操作时请参阅-

actors.get(z).getName()==movieActors.get(n).getName()

我假设名称是一个字符串,在这种情况下,对于相同的名称,它将不是真的。您需要这样做

actors.get(z).getName().equals(movieActors.get(n).getName())

参考本节-

使用“.equals”代替“==”

使用“.equals”代替“==”

几个开放点--

首先,我建议使用
foreach
对像
List
这样的DS进行迭代。 看看

第二,使用
equals
比较字符串。帮助-

第三,使用计数器变量,例如
int counter=0;
,该变量可用于将重复出现的次数计算为

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);
}
}
根据评论讨论进行更新,以记录在不同电影中出现的演员数量:

您可以维护一个
地图

几个开放点--

首先,我建议使用
foreach
对像
List
这样的DS进行迭代。 看看

第二,使用
equals
比较字符串。帮助-

第三,使用计数器变量,例如
int counter=0;
,该变量可用于将重复出现的次数计算为

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);
}
}
根据评论讨论进行更新,以记录在不同电影中出现的演员数量:


您可以维护一个
映射

从其他条件中删除所有内容,并用以下代码替换。虽然这不是一个最佳解决方案,但可能符合您的目的

if(actors.get(z).getName().equals(movieActors.get(n).getName())) {
    counter++; //currently just saving the count, you can save the name as well
}

从else条件中删除所有内容,并替换为以下代码。虽然这不是一个最佳解决方案,但可能符合您的目的

if(actors.get(z).getName().equals(movieActors.get(n).getName())) {
    counter++; //currently just saving the count, you can save the name as well
}
与@Ahmed Raaj相同

@Override
public boolean equals(Object obj) {
    if(obj instanceof Actor){
        Actor a = (Actor)obj;
        if(this.name.equals(a.name)){
            return true;
        }
    }
    return false;

}
else{
List movieActors=x.getListOfActors();
List duplicateActors=new ArrayList();
List uniqueActors=new ArrayList();
演员(演员:电影演员){
if(actors.contains(eachActor))
重复参与者。添加(每个参与者);
其他的
唯一参与者。添加(每个参与者);
}
for(每个参与者重复参与者:重复参与者){
对于(每个演员原始演员:演员){
if(eachOriginalActors.getName().equals(eachDuplicateActor.getName())
eachOriginalActors.addCount();
}
}
actors.addAll(uniqueActors);
}
我还没有测试代码,所以可能会出现与@Ahmed Raaj相同的错误

@Override
public boolean equals(Object obj) {
    if(obj instanceof Actor){
        Actor a = (Actor)obj;
        if(this.name.equals(a.name)){
            return true;
        }
    }
    return false;

}
else{
List movieActors=x.getListOfActors();
List duplicateActors=new ArrayList();
List uniqueActors=new ArrayList();
演员(演员:电影演员){
if(actors.contains(eachActor))
重复参与者。添加(每个参与者);
其他的
唯一参与者。添加(每个参与者);
}
for(每个参与者重复参与者:重复参与者){
对于(每个演员原始演员:演员){
if(eachOriginalActors.getName().equals(eachDuplicateActor.getName())
eachOriginalActors.addCount();
}
}
actors.addAll(uniqueActors);
}

我还没有测试代码,因此可能会出现错误

我认为您应该颠倒循环的顺序,只有在找不到参与者时才添加参与者:

else{

        List<Actor> movieActors = x.getListOfActors();      
        List<Actor> duplicateActors = new ArrayList<>();
        List<Actor> uniqueActors = new ArrayList<>();

        for(Actor eachActor : movieActor){
            if(actors.contains(eachActor))
                duplicateActors.add(eachActor);
            else
                uniqueActors.add(eachActor);
        }

        for(Actor eachDuplicateActor : duplicateActors){
            for(Actor eachOriginalActors : actors){
                if(eachOriginalActors.getName().equals(eachDuplicateActor.getName())
                        eachOriginalActors.addCount();
            }
        }

        actors.addAll(uniqueActors);
    }

for(int n=0;n我认为应该颠倒循环的顺序,只有在找不到参与者时才添加参与者:

else{

        List<Actor> movieActors = x.getListOfActors();      
        List<Actor> duplicateActors = new ArrayList<>();
        List<Actor> uniqueActors = new ArrayList<>();

        for(Actor eachActor : movieActor){
            if(actors.contains(eachActor))
                duplicateActors.add(eachActor);
            else
                uniqueActors.add(eachActor);
        }

        for(Actor eachDuplicateActor : duplicateActors){
            for(Actor eachOriginalActors : actors){
                if(eachOriginalActors.getName().equals(eachDuplicateActor.getName())
                        eachOriginalActors.addCount();
            }
        }

        actors.addAll(uniqueActors);
    }

用于(int n=0;n可能是No的重复项,问题不是比较字符串。使用==或.equals会得到相同的结果。@JackieChen通过增加演员计数来实现什么?是否要将此计数保存在某个位置或什么?每个演员中的计数是他们所观看的电影的数量,因此我添加了两部演员相同的电影,即演员计数现在应该是2。@nullpointer您可以维护一个
Map
(不是字面上的
Map
)通常情况下,要存储计数。在
if
中增加每个actor键的计数。No可能重复,问题不是比较字符串。使用==或.equals会给出相同的结果。@JackieChen通过增加actor count,您希望实现什么?是否要将此计数保存在某个位置或什么?每个actor中的计数是他们在其中的电影数量,因此我添加了两部演员相同的电影,演员数量现在应该是2。@NullPointer您可以维护一个
映射
(不是字面上的
映射
)通常情况下,存储计数。在
中,如果
增加每个演员键的计数。好的,我会解决这个问题。但我认为最初的问题仍然存在,因为我正在查看movieActors,z次将不断添加重复的演员对象。@vijay jainCorrect me,如果我错了,它将添加重复的演员对象actors或movieActors中存在重复项。在这种情况下,您可以选择set/hashset并重写actors类中的equals和hashcode方法。您是正确的,它不断添加重复项,因为它的循环n*z次。使用hashset可以工作。如果我可以使用一个循环来完成此操作,则应该可以,但不确定如何完成。好的,我会解决此问题。但我认为初始的p问题仍然存在,因为我正在浏览电影演员,z次将不断添加重复的演员对象。@vijay jainCorrect me,如果我错了,如果演员中已经有重复的,它将添加重复的对象。@vijay jainCorrect me