【问题标题】:How to iterate over two Collections of Objects simultaneously? [duplicate]如何同时迭代两个对象集合? [复制]
【发布时间】:2011-12-28 22:05:04
【问题描述】:

可能重复:
How to most elegantly iterate through parallel collections?
Is there an accepted Java equivalent to Python's zip()?

我必须同时遍历两个对象集合以查看它们的成员是否相等。有没有办法使用计数器来访问对象或执行类似于下面的 for 循环的操作?

Boolean compareCollection(Collection<Object> c1, Collection<Object> c2)
{
     //something like -
     for (Object ob1 : c1, Object ob2 : c2){
           //check if ob1.val == ob2.val
     }
     return true;
}

【问题讨论】:

    标签: java


    【解决方案1】:

    类似这样的:

    public static boolean compareCollection(Collection<Object> c1, Collection<Object> c2)   {
        if (c1 == null)
            return c2 == null;
        else if (c2 == null || c1.size() != c2.size())
            return false;
        Iterator<Object> it1 = c1.iterator();
        Iterator<Object> it2 = c2.iterator();
        while (it1.hasNext()) {
            Object o1 = it1.next();
            Object o2 = it2.next();
            if (!o1.equals(o2))
                return false;
        }
         return true;
    }
    

    当然,你必须用正确的类型参数化集合(我猜不仅仅是Object)并进行适当的比较:

    if (!o1.val.equals(o2.val))
    

    【讨论】:

    • 这就是我要找的,谢谢!
    【解决方案2】:

    你能用List.equals(),实现类似的逻辑吗?

    另外,commons-collections ListUtils.isListEquals 可能是您想要的: http://commons.apache.org/collections/api-release/index.html

    【讨论】:

    • CollectionUtils.isEqualCollection(Collection a, Collection b) 是...收藏的更好选择。
    • 每个Collection 都不是List。
    • 公平点 - CollectionUtils 可能更好,尽管上面按顺序比较元素的逻辑更像列表。
    猜你喜欢
    • 2023-01-12
    • 1970-01-01
    • 2023-03-07
    • 2019-12-03
    • 2014-09-15
    • 2011-03-19
    • 2012-04-30
    • 2015-09-07
    • 1970-01-01
    相关资源
    最近更新 更多