Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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_List_Collections_Compare - Fatal编程技术网

Java 如何根据所包含的元素比较两个列表?

Java 如何根据所包含的元素比较两个列表?,java,list,collections,compare,Java,List,Collections,Compare,在我的单元测试课上,我有两个列表。一个是expectedValue,另一个是returnedType 我在做什么 Collections.sort(expected); Collections.sort(returned); 但是,如何根据其中一个元素的值类型来比较两个列表呢?例如,我在两个列表中都有元素sortOrder,它的值为1、2或3,那么我如何比较或说执行类似assertEqualexpected的操作,为两个列表返回,并确保两个列表具有相同的元素和相同的sortOrder含义元素也

在我的单元测试课上,我有两个列表。一个是expectedValue,另一个是returnedType

我在做什么

Collections.sort(expected);
Collections.sort(returned);
但是,如何根据其中一个元素的值类型来比较两个列表呢?例如,我在两个列表中都有元素sortOrder,它的值为1、2或3,那么我如何比较或说执行类似assertEqualexpected的操作,为两个列表返回,并确保两个列表具有相同的元素和相同的sortOrder含义元素也采用正确的排序格式

注意:我不应该使用任何外部库来执行此操作

更新

我的报税表和预期清单示例:

例外列表=[代码:分析师,分拣员:2,代码:街道,分拣员:1]和 返回的列表=[代码:STREET,排序器:1,代码:ANALYST,排序器:2]

所以这里最基本的问题是,如何根据列表中的一个元素值对列表进行排序,在我们的示例中,根据sortOrder值对列表进行排序,这样我们的期望值应该是

例外列表=[Code:STREET,SortOrder:1,Code:ANALYST,SortOrder:2]

使用。

查看用于构建测试表达式的匹配器库


它提供了许多方法来比较集合和其他难以比较的类以及特殊的匹配器,这些方法告诉您在抛出AssertionErrors时集合不匹配的原因

确保列表中的对象覆盖equals和hashcode方法,但除此之外,您可以根据java.util.List的约定直接比较列表,该约定规定,如果列表包含相同顺序的相同对象,则它们是相等的

编辑:

最好的办法就是去做

assertEquals(expected, returned);
因为AbstractList使用成对比较实现了equals。 如果您不确定,您收到的列表将继承自AbstractList,您可以随时这样做

assertEquals(new ArrayList(expected), new ArrayList(returned));
我把剩下的答案留作记录之用,不隐瞒我可耻的无知

是否要声明列表的顺序也正确

应为公共静态void assertEqualsList,返回列表 { assertequalexpected.size,returned.size; 如果!应为。已返回 { 失败 } forint i=0;i扩展波希米亚人的答案+1,是一个很好的方法。下面是一个例子:

assertThat(myListOfIntegers, contains(1, 2, 3));
Matchers.contains断言列表元素的类型、数量和顺序正确。因此,在上面的断言中,我希望MyListFinTegers是确切的列表:[1,2,3]。

尝试使用以下方法:
CollectionUtils.isEqualCollectionexpected,已返回

那不行。集合不实现equals,因此使用对象中的默认实现,它比较内存addreses-ie list1.equalslist2与list1==list2相同,后者总是false AbstractList确实覆盖equals。AbstractSequentialList扩展了AbstractList,因此它也覆盖了equals。Java 6中列表的每一个默认实现都覆盖了相等的值。哦,很抱歉,我是在开玩笑——我的错。我将检查实现。干杯。有没有不使用任何外部库的方法呢?是的。我需要声明两个列表都有相同的元素,并且两个列表的元素顺序都相同。我正在使用Junit测试框架,因此需要使用简单的断言方法。我可以根据其中一个元素的值来比较两个列表吗?从问题的更新部分来看,完全不清楚您想要实现什么。您的列表中有哪些元素?我的返回列表中有[Code:STREET,SortOrder:1,Code:ANALYST,SortOrder:2]元素和例外列表=[Code:ANALYST,SortOrder:2,Code:STREET,SortOrder:1]对问题的描述非常不清楚。不能基于其中一个元素的值对集合进行排序-对集合进行排序会对其包含的所有值进行排序。使用list1.EqualList2,您可以很容易地测试两个列表是否以相同的顺序包含相同的值。@JimN:List集合可以根据其元素的一个值进行排序,这可以使用Comparator来完成。请解释元素的含义和值的含义。在上面的列表中,元素指的是sortOrder和值是指排序器的值,即1、2和3