In un test di unità, voglio verificare che due elenchi contengano gli stessi elementi. L'elenco da testare è costituito da un elenco di oggetti Person
, in cui viene estratto un campo di tipo String
. L'altro elenco contiene letterali String
.Java 8: un modo più efficiente di confrontare elenchi di tipi diversi?
Si trova spesso il seguente frammento di codice per eseguire questa operazione (vedi 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));
La classe Person
è defiend come:
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
}
Nell'esempio di cui sopra, l'elenco delle persone (o persone) viene trasformato in un elenco di stringhe utilizzando le tecniche di Java 8 e la comparazione viene eseguita alla vecchia maniera.
Ora mi chiedo, se c'è un modo più diretto o più efficiente di fare il confronto usando altre dichiarazioni di Java 8, ad esempio allMatch()
o qualche Predicate<T>
o altro.
Perché non utilizzare invece i matchers [Hamcrest] (http://hamcrest.org/)? – Makoto
Vuoi veramente controllare 'containsAll'? Quindi l'ordine e la dimensione degli elenchi possono essere diversi? –
@TagirValeev Voglio assicurarmi che la 'Lista persone' contenga tutte le persone che ho specificato nell'elenco statico confrontando i loro nomi univoci. Quindi l'ordine delle liste potrebbe essere diverso ma per affermazioni riuscite, la dimensione delle liste dovrebbe essere la stessa. –