我需要比较2个不具有相同数量值的ArrayList的结果。因此,例如list_SrcColumnDetails将包含10个值,而list_userEnteredfieldName将包含2个值。现在,在2个值中的list_userEnteredfieldName中,list_SrcColumnDetails中仅存在1个。
所以我想在结果中显示哪个值匹配而哪个不匹配。 我尝试比较ArrayList,但是据我所知,比较ArrayList的值的数量必须相同。因此,我使用了Iterator,但无法正常工作。关于如何通过ArrayList或Iterator比较每个索引的值的任何帮助?
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 ");
}
}
答案 0 :(得分:1)
您可以在这里做几件事。
首先,您可以将两个列表都更改为一组。然后,您可以使用并集和差值来获取匹配元素和两个方向上的不同元素。
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));
}
输出
[3, 7, 9]
[12]
[1, 5]
[1, 3, 5, 7, 9, 12]
第二,您可以先对列表进行排序,然后对它们进行逐步处理,仅推进较低(值)的迭代器,以便检测匹配项。当您到达第一个结尾时停止,其余部分则是第二个结尾的一部分。
答案 1 :(得分:1)
初始化与两个列表相对应的两个集合。
然后使用Guava库的Sets.union()
和Sets.intersection()
。
https://google.github.io/guava/releases/21.0/api/docs/com/google/common/collect/Sets.html