Java如何比较2个ArrayList或迭代器的结果

Java如何比较2个ArrayList或迭代器的结果,java,arraylist,iterator,Java,Arraylist,Iterator,我需要比较2个ArrayList的结果,这些结果的值数量不同。例如,list_SrcColumnDetails将包含10个值,list_userEnteredfieldName将包含2个值。现在在list_userEnteredfieldName中,2个值中只有1个存在于list_SrcColumnDetails中 所以我想在结果中显示哪个值匹配,哪个不匹配。 我尝试比较ArrayList,但根据我比较ArrayList的知识,值的数量需要相同。所以我使用了迭代器,但它没有按预期工作。关于如何通

我需要比较2个ArrayList的结果,这些结果的值数量不同。例如,list_SrcColumnDetails将包含10个值,list_userEnteredfieldName将包含2个值。现在在list_userEnteredfieldName中,2个值中只有1个存在于list_SrcColumnDetails中

所以我想在结果中显示哪个值匹配,哪个不匹配。 我尝试比较ArrayList,但根据我比较ArrayList的知识,值的数量需要相同。所以我使用了迭代器,但它没有按预期工作。关于如何通过ArrayList或迭代器比较每个索引的值,有什么帮助吗

List<String> list_SrcColumnDetails = new ArrayList <String>();   // Id,Name,Adress,.....upto 10 values
List<String> list_userEnteredfieldName = new ArrayList <String>(); // Id,Text . Text does not exists in list_SrcColumnDetails
Iterator<String> user_iterator1 = list_userEnteredfieldName.iterator();
Iterator<String> Src_iterator2 = list_SrcColumnDetails.iterator();
while(user_iterator1.hasNext()){

              if (user_iterator1.next().equals(Src_iterator2.next()))
              {
                  System.out.println("User Entered field " +  user_iterator1.toString()+ " exists in Source ");
              }


              else if(!Src_iterator2.hasNext() || !user_iterator1.next().equals(Src_iterator2.next())){

                  System.out.println("User Entered field " +   user_iterator1.toString() + " is not correct ");

              }
            }
List List\u SrcColumnDetails=newarraylist();//Id、名称、地址……最多10个值
List List_userEnteredfieldName=新ArrayList();//Id,文本。列表中不存在文本。\u src ColumnDetails
迭代器user_iterator1=list_userEnteredfieldName.Iterator();
迭代器Src_iterator2=list_SrcColumnDetails.Iterator();
while(user_iterator1.hasNext()){
if(user_iterator1.next().equals(Src_iterator2.next()))
{
System.out.println(“用户输入的字段”+User_iterator1.toString()+“存在于源代码中”);
}
如果(!Src_iterator2.hasNext()| |!user_iterator1.next().equals(Src_iterator2.next())){
System.out.println(“用户输入的字段”+User_iterator1.toString()+“不正确”);
}
}

您可以在这里做几件事

首先,您可以将两个列表都更改为集合。然后,您可以使用并集和差分来获得匹配元素和两个方向上的不同元素

public static void main(String[] args) {
    List<Integer> first = Arrays.asList(1, 3, 5, 7, 9);
    List<Integer> second = Arrays.asList(1, 5, 12);

    Set<Integer> first_set = new HashSet<>(first);
    Set<Integer> second_set = new HashSet<>(second);

    System.out.println(Sets.difference(first_set, second_set));
    System.out.println(Sets.difference(second_set, first_set));
    System.out.println(Sets.intersection(first_set, second_set));
    System.out.println(Sets.union(first_set, second_set));
}

第二,您可以先对列表进行排序,然后对它们进行处理,只需对较低的(值)迭代器进行处理,以便检测匹配项。当您到达一个列表的末尾时停止,其余部分是与第二个列表不同的部分。

初始化与两个列表对应的两个集合

然后使用和使用番石榴库


广泛的问题。但是我可以告诉您,您实际的比较方法无法工作,因为它意味着两个列表之间的元素与两个迭代器的当前位置相匹配。事实上,您的方法是不正确的,因为要确认一个值在一个列表中而不是在另一个列表中,您必须迭代另一个列表的所有元素。在第一个列表上结合到集合.contains()的迭代可能会有所帮助,但它在事件检查方面有一些限制。。谢谢,@John Humphreys-w00te,您的示例代码帮助我解决了问题。很高兴听到它:)。
[3, 7, 9]
[12]
[1, 5]
[1, 3, 5, 7, 9, 12]