在单元测试中,我想验证两个列表包含相同的元素。要测试的列表构建了一个Person
对象列表,其中提取了String
类型的一个字段。另一个列表包含String
文字。Java 8:比较不同类型列表的更有效的方法?
人们通常发现下面的代码段来完成此任务(见this answer):
List<Person> people = getPeopleFromDatabasePseudoMethod();
List<String> expectedValues = Arrays.asList("john", "joe", "bill");
assertTrue(people.stream().map(person -> person.getName()).collect(Collectors.toList()).containsAll(expectedValues));
的Person
类是defiend为:
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
// other getters and setters
}
在上面的例子中,人的列表(或人)转换为使用Java 8技术的字符串列表,并且以老式方式完成比较。
现在我想知道,是否有更直接或更有效的方式来使用其他Java 8语句进行比较,例如allMatch()
或某些Predicate<T>
或其他东西。
为什么不使用[Hamcrest](http://hamcrest.org/)匹配器呢? – Makoto
你真的想检查'containsAll'吗?那么列表的顺序和大小可能会有所不同? –
@TagirValeev我想确保'List people'包含我通过比较其唯一名称在静态列表中指定的所有人员。所以列表的顺序可能不同,但为了成功断言,列表的大小应该是相同的。 –