比较List <String []>

Rob*_*inJ 6 java arrays android list

我有两个List<String[]>(字符串数组列表),我想将内容相互匹配.显然==没有做到这一点,但.equals ()似乎也没有这样做.那么我应该如何检查字符串数组列表的内容是否相同?

顺便说一句,在上述两种情况下,我都收到了一条带有消息的异常null.

编辑:好的...出于某种原因只能x.equals(y)起作用,而不是y.equals(x).奇...

Pau*_*ora 5

也许最简单的解决方案是使用两个List<List<String>>s代替.假设使用的List实现扩展AbstractList,using equals将为您提供所需的行为.从以下文档AbstractList.equals:

将指定对象与此列表进行比较以获得相等性.返回 true当且仅当该指定的对象也是一个列表,两个列表具有相同的大小,并且在两个列表元素的所有相应的对是相等.(两个元素e1,e2如果相等则相等(e1==null ? e2==null : e1.equals(e2)).)换句话说,如果两个列表包含相同顺序的相同元素,则它们被定义为相等.

您可以轻松地String[]在一个使用List<String>扩展的瘦实现中包装.AbstractListArrays.asList

编辑:这是一个例子:

String[] array1 = {"1", "2", "3"};
String[] array2 = {"4", "7"};

String[] array3 = {"1", "2", "3"};
String[] array4 = {"4", "7"};

List<List<String>> lst1 = new ArrayList<>();
lst1.add(Arrays.asList(array1));
lst1.add(Arrays.asList(array2));

List<List<String>> lst2 = new ArrayList<>();
lst2.add(Arrays.asList(array3));
lst2.add(Arrays.asList(array4));

System.out.println(lst1.equals(lst2)); //prints true
Run Code Online (Sandbox Code Playgroud)


Rob*_*inJ 0

工作正常.equals(),但不知何故只在一个方向。

我本来打算接受这个问题的第一个答案,但显然那个人删除了他的答案。