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

时间:2019-05-18 18:58:55

标签: java arraylist iterator

我需要比较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 ");

              }
            }

2 个答案:

答案 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