Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较列表<;字符串[]>;_Java_Android_Arrays_List - Fatal编程技术网

Java 比较列表<;字符串[]>;

Java 比较列表<;字符串[]>;,java,android,arrays,list,Java,Android,Arrays,List,我有两个列表(字符串数组列表),我希望将内容相互匹配。显然,=并不能起作用,但是.equals()似乎也不能起作用。那么,我应该如何检查字符串数组列表的内容是否相同呢 顺便说一下,在上述两种情况下,我都得到了一个异常消息null 编辑:确定。。。出于某种原因,只有x.equals(y)有效,而不是y.equals(x)。奇怪的…也许最简单的解决方案是使用两个列表。假设使用的List实现扩展AbstractList,使用equals将获得所需的行为。从以下文件中: 比较指定对象与此列表是否相等。退

我有两个
列表
(字符串数组列表),我希望将内容相互匹配。显然,
=
并不能起作用,但是
.equals()
似乎也不能起作用。那么,我应该如何检查字符串数组列表的内容是否相同呢


顺便说一下,在上述两种情况下,我都得到了一个异常消息
null


编辑:确定。。。出于某种原因,只有
x.equals(y)
有效,而不是
y.equals(x)
。奇怪的…

也许最简单的解决方案是使用两个
列表。假设使用的
List
实现扩展
AbstractList
,使用
equals
将获得所需的行为。从以下文件中:

比较指定对象与此列表是否相等。退换商品
true
当且仅当指定对象也是列表时,两个列表 具有相同的大小,且所有对应的两个元素对 名单是平等的。(如果
(e1==null,则两个元素
e1
e2
相等。)? e2==null:e1.equals(e2))
)换句话说,两个列表被定义为 如果它们包含相同顺序的相同元素,则表示相等

您可以轻松地将
字符串[]
包装在一个精简的
列表
实现中,该实现通过使用扩展
抽象列表

编辑:以下是一个示例:

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
String[]array1={“1”、“2”、“3”};
字符串[]array2={“4”,“7”};
字符串[]数组3={“1”、“2”、“3”};
字符串[]数组4={“4”,“7”};
List lst1=new ArrayList();
lst1.add(Arrays.asList(array1));
lst1.add(Arrays.asList(array2));
List lst2=新的ArrayList();
lst2.add(Arrays.asList(array3));
lst2.add(Arrays.asList(array4));
System.out.println(lst1.equals(lst2))//打印正确

通常应避免处理数组。它们是丑陋的,并导致此类问题。如果可能,请使用
列表
,然后您可以正常使用
.equals()

如果您坚持,您可以使用下面这样的自定义isequal实现。关键是使用
Arrays.equals()

公共类DemoEquals{
listOne=(List)Arrays.asList(新字符串[]{“one1”,“one2”},新字符串[]{“two1”});
listOneOne=(List)Arrays.asList(新字符串[]{“one1”,“one2”},新字符串[]{“two1”});
List listwo=(List)Arrays.asList(新字符串[]{“2one1”,“2one2”},新字符串[]{“2two1”});
私有布尔isEqual(列表1、列表2){
if(list1.size()!=list2.size())返回false;
对于(int i=0;i
您可以使用该界面。实现所需的方法,您可以使用List1.compare(List2)函数。

使用Jon Skeet的答案(使用番石榴),另一个选项是将两个列表转换为两个字符串,然后使用
equals
进行比较。无循环。

只需
.equals()
就可以了,但不知何故只能在一个方向上运行


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

你能提供一个你尝试过的代码片段吗?“我收到一个消息null的异常……出于某种原因,只有x.equals(y)有效,而不是y.equals(x)。“我相信
y
null
,你有没有初始化过它?+Sam我有,就在
公共类MainActivity扩展活动{
之后。请发布相关代码,如果您收到NullPointerException,则您正在定义但未初始化某些内容。(另外,您希望在中使用
@username
而不是
+username
,以便通知特定用户。)你到底在哪里得到一个空异常?也许你需要确保y在y.equals(x)之前不是空的。例如,如果(y!=null&&y.equals(x)| | y==null&&x==null){…如果它在一个方向上工作,它就不工作了。你在这里创建了一个bug,稍后会困扰你。无论@Paul Bellora还是我的答案都很好,请坚持其中一个
public class DemoEquals {
    List<String[]> listOne = (List<String[]>) Arrays.asList(new String[]{"one1", "one2"}, new String[]{"two1"});
    List<String[]> listOneOne = (List<String[]>) Arrays.asList(new String[]{"one1", "one2"}, new String[]{"two1"});
    List<String[]> listTwo = (List<String[]>) Arrays.asList(new String[]{"2one1", "2one2"}, new String[]{"2two1"});

    private boolean isEqual(List<String[]> list1, List<String[]> list2) {
        if (list1.size() != list2.size()) return false;
        for (int i = 0; i < list1.size(); i++) {
            if (!Arrays.equals(list1.get(i), list2.get(i))) return false;
        }
        return true;
    }
    @SuppressWarnings("unchecked")
    private void isEqual() {
        //prints true
        System.out.println(isEqual(Collections.EMPTY_LIST, Collections.EMPTY_LIST));
        //prints true
        System.out.println(isEqual(listOne, listOne));
        //prints true
        System.out.println(isEqual(listOne, listOneOne));
        //prints false
        System.out.println(isEqual(listOne, listTwo));
        //prints false
        System.out.println(isEqual(listOne, Collections.EMPTY_LIST));

    }
    public static void main(String[] args) {
        new DemoEquals().isEqual();
    }
}