java - 如何将数组列表的相等性与现代 Java 进行比较?

标签 java arrays list java-8 equals

我有两个数组列表。

如何在不使用外部库的情况下轻松比较这些与 Java 8 及其特性的相等性?我正在寻找比这样的蛮力代码“更好”(更高级别、更短、更高效)的解决方案(未经测试的代码,可能包含拼写错误等,不是问题的重点):

boolean compare(List<String[]> list1, List<String[]> list2) 
{
    // tests for nulls etc omitted
    if(list1.size() != list2.size()) {
       return false;
    }
    for(i=0; i<list1.size(); ++i) {
        if(!Arrays.equals(list1.get(i), list2.get(i))) {
            return false;
        }
    }
    return true;
}

或者,如果没有更好的方法,那也是一个有效的答案。

奖励:如果 Java 9 提供了 Java 8 所能提供的更好的方式,请随时提及。

编辑:查看评论后,看到这个问题变得适度热门,我认为更好”应该包括首先检查长度所有数组,在检查数组内容之前,因为如果内部数组很长,则有可能更快地发现不等式。

最佳答案

for 循环至少可以流化,导致:

return (list1.size()==list2.size() &&
        IntStream.range(0, list1.size())
                 .allMatch(i -> Arrays.equals(list1.get(i), list2.get(i)));

关于java - 如何将数组列表的相等性与现代 Java 进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35408290/

相关文章:

java - Spring @Transactional 只读

java - Web应用程序的执行流程?

python - 想要比 numpy.take 更快的索引吗?

java - 比较java中不同类型的数组大小

c# - 列表中的重复项

list - 为什么 `Nil` 被定义为 `case object`

java - Hibernate saveOrUpdate() 尝试在应该更新时保存

java - 在我的应用程序中共享静态字符串的策略

c++ - 指向指针数组的指针!如何删除?

list - Prolog 中列表的串联