W teście jednostkowym chcę sprawdzić, czy dwie listy zawierają te same elementy. Lista do przetestowania jest zbudowana z listy obiektów Person
, z których wypakowywane jest jedno pole typu String
. Druga lista zawiera literały String
.Java 8: Bardziej efektywny sposób porównywania list różnych typów?
Często stwierdza następujący fragment kodu do wykonania tego zadania (patrz 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));
Klasa Person
jest zdefiniowana w:
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
}
w powyższym przykładzie, do wykazu osób (lub ludzie) jest przekształcana na listę Ciągów przy użyciu technik Java 8, a porównanie odbywa się w staromodny sposób.
Teraz zastanawiam się, czy istnieje bardziej bezpośredni lub bardziej efektywny sposób porównania za pomocą innych instrukcji Java 8, na przykład allMatch()
lub niektóre Predicate<T>
lub coś innego.
Zamiast tego należy użyć dopasowań [Hamcrest] (http://hamcrest.org/) – Makoto
Czy na pewno chcesz sprawdzić 'zawieraAll'? Czy kolejność i rozmiar list mogą być różne? –
@TagirValeev Chcę się upewnić, że osoby "Lista" zawierają wszystkie osoby określone na liście statycznej, porównując ich unikalne nazwy. Kolejność list może być różna, ale dla pomyślnego zapewnienia, wielkość list powinna być taka sama. –