在编写测试时,我经常检查两个集合是否具有相同的内容,有时即使它们具有相同的顺序。所以我无休止地最终做同样的事情:
assertEquals(collection1.size(), collection2.size());
for (ItemType item : collection1){
if (!collection2.contains(item)) fail(); //This depends on the collection
}
//some more code is required to test ordering
你知道用一些标准库结束这种折磨的好方法吗?
答案 0 :(得分:4)
更好地使用equals()
方法,因为如果您使用containsAll
,则两个具有相同元素的列表可以等于,尽管元素的顺序不同。因此,使用containsAll
并不是比较List
的好方法
这是一个演示
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
public class TwoButtons {
public static void main(String[] args){
Collection<Integer> c1 = new ArrayList<>(Arrays.asList(1,2,3));
Collection<Integer> c2 = new ArrayList<>(Arrays.asList(3,2,1));
System.out.println("equals " + c1.equals(c2));
System.out.println("containsAll " + c1.containsAll(c2));
}
}
输出
equals false
containsAll true
答案 1 :(得分:1)
您可以将此作为条件
collection1.size()==collection2.size() && collection1.containsAll(collection2)
在这里,您要检查两个集合是否具有相同的大小以及具有所有元素。
根据joachim-isaksson的评论 你可以这样做,但效率不高。
collection1.containsAll(collection2) && collection2.containsAll(collection1)
你应该使用