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