【问题标题】:Java How to compare results of 2 ArrayList or iteratorsJava如何比较2个ArrayList或迭代器的结果
【发布时间】:2019-10-05 16:57:18
【问题描述】:

我需要比较 2 个值不同的 ArrayList 的结果。因此,例如 list_SrcColumnDetails 将包含 10 个值,而 list_userEnteredfieldName 将包含 2 个值。现在在 list_userEnteredfieldName 的 2 个值中,list_SrcColumnDetails 中只存在 1 个。

所以我想在结果中显示哪个值匹配,哪个不匹配。 我尝试比较 ArrayLists,但根据我比较 ArrayLists 的知识,值的数量需要相同。所以我使用了 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 ");

              }
            }

【问题讨论】:

  • 广泛的问题。但我可以告诉你,你的实际比较方式行不通,因为这意味着两个列表之间的元素与两个迭代器的当前位置匹配。事实上,你的方式是不正确的,因为要确认一个值在一个列表中而不是在另一个列表中,你必须迭代另一个列表的所有元素。与 Collection.contains() 组合的第一个列表上的迭代可能会有所帮助,但它对出现检查有一些限制..

标签: java arraylist iterator


【解决方案1】:

【讨论】:

    【解决方案2】:

    你可以在这里做几件事。

    首先,您可以将两个列表更改为集合。然后你可以使用 union 和 Difference 来获取匹配的元素和任一方向的不同元素。

    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]
    

    其次,您可以先对列表进行排序,然后在它们之间进行排序,仅推进较低(值)的迭代器,以便检测匹配项。当你到达一个结束时停止,剩下的就是与第二个不同的一部分。

    【讨论】:

    • 谢谢,@John Humphreys - w00te,您的示例代码帮助我解决了我的问题。
    • 很高兴听到它:)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多