java如何根据所包含的元素比较两个列表?
在我的单元测试课上,我有两个列表。一个是expectedValue
,另一个是returnedType
我在做什么
Collections.sort(expected);
Collections.sort(returned);
但是,如何根据其中一个元素的值类型来比较两个列表呢?例如,我在两个列表中都有元素sortOrder
,它有来自1,2 or 3
的值,那么我如何比较或说执行类似assertEqual(expected, returned) for both the list
的操作,并确保这两个列表都有相同的元素和相同的排序器含义,以及元素也采用正确的排序格式
注意:我不应该使用任何外部库来执行此操作
更新
我的报税表和预期清单示例:
excepted List = [Code: ANALYST, SortOrder: 2, Code: STREET, SortOrder: 1]
和
returned List = [Code: STREET, SortOrder: 1, Code: ANALYST, SortOrder: 2]
所以这里最基本的问题是,如何根据列表中的一个元素值对列表进行排序,在我们的示例中,根据sortOrder
值对列表进行排序,这样我们的期望值应该是
excepted List = [Code: STREET, SortOrder: 1, Code: ANALYST, SortOrder: 2]
# 1 楼答案
编辑:
最好的方法就是
因为AbstractList使用成对比较实现了equals。 如果您不确定,您收到的列表继承自AbstractList,您可以随时这样做
我把剩下的答案留作记录之用(并不是为了掩饰我可耻的无知)
您想断言列表的顺序也正确吗
# 2 楼答案
试着用这个: 收藏品。isEqualCollection(预期、返回)
# 3 楼答案
确保列表中的对象覆盖equals和hashcode方法,否则您可以根据java契约直接比较列表。util。如果列表包含相同顺序的相同对象,则声明它们相等的列表
http://download.oracle.com/javase/6/docs/api/java/util/List.html#equals(java.lang.Object)
# 4 楼答案
要扩展波希米亚人的答案(+1),Hamcrest是一个非常好的方法。下面是一个例子:
Matchers.contains
断言列表元素的类型、数量和顺序正确。因此,在上面的断言中,我希望myListOfIntegers
是确切的列表:[1, 2, 3]
# 5 楼答案
看看Hamcrest——用于构建测试表达式的匹配器库
它提供了许多方法来比较集合(以及其他难以比较的类),并提供了特殊的匹配器,可以在抛出断言错误时告诉您集合不匹配的原因
# 6 楼答案
使用^{}