在Java8中,如何检查两个未排序的列表是否相等?

在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)->???

需要比较两个列表。 列表可以包含空项和重复项(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)->???;
测试:

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()));