在Java8中,如何检查两个未排序的列表是否相等?
需要比较两个列表。 列表可以包含空项和重复项(Object::equals) {41000}等于{1004100} {4,100,100}不等于{100,4,4} {“W”,“s”,“s”,null,null}等于{null,“s”,null,“s”,“W”} 方法:在Java8中,如何检查两个未排序的列表是否相等?,java,lambda,collections,stream,Java,Lambda,Collections,Stream,需要比较两个列表。 列表可以包含空项和重复项(Object::equals) {41000}等于{1004100} {4,100,100}不等于{100,4,4} {“W”,“s”,“s”,null,null}等于{null,“s”,null,“s”,“W”} 方法: BiPredicate<List<?>, List<?>> compareList = (a, b) -> ???; BiPredicate>compareList=(a,b)->???
BiPredicate<List<?>, List<?>> compareList = (a, b) -> ???;
BiPredicate>compareList=(a,b)->???;
测试:
List<String> listS = Arrays.asList("W", "s", "s", null, null);
List<String> listT = Arrays.asList(null, "s", null, "s", "W");
assertTrue(compareList.test(listS, listT));
List<Integer> listA = Arrays.asList(4, 100, 100);
List<Integer> listB = Arrays.asList(100, 4, 100);
List<Integer> listC = Arrays.asList(100, 4, 4);
assertTrue(compareList.test(listA, listB));
assertFalse(compareList.test(listA, listC));
List List=Arrays.asList(“W”、“s”、“s”、null、null);
List listT=Arrays.asList(null,“s”,null,“s”,“W”);
assertTrue(比较列表测试(列表、列表));
listA=Arrays.asList(41000);
listB=Arrays.asList(100,4100);
listC=Arrays.asList(100,4,4);
assertTrue(比较列表测试(listA、listB));
assertFalse(比较列表测试(listA,listC));
使用和
List List=Arrays.asList(null,“s”,null,“s”,“W”);
资产(列表)。包含实际存在于订单中的(“W”、“s”、“s”、空、空);
无需为基本Java类型编写自己的断言库。已经有一些:AssertJ、Hamcrest等。您可以使用
org.Hamcrest.collection.IsiterableContainingAnyOrder.containsInAnyOrder()
检查列表中包含的内容,如下所示
assertThat("List equality without order",
listA, containsInAnyOrder(listB.toArray()));
这里有问题吗?你应该把你的问题说清楚,不要把它放在评论里。目前,您刚刚转储了一些我们只能认为不起作用的代码。解释你的代码应该做什么,实际结果,以及结果如何不符合你的期望。试着包括一个。你如何定义平等?如何处理重复的元素?为什么在已经有解决方案的情况下问这个问题?我可能需要解决相同的任务,但不是在测试中,没有测试框架。
assertThat("List equality without order",
listA, containsInAnyOrder(listB.toArray()));