Quale sarebbe un buon modo per confrontare due istanze di Stream
in Java 8 e scoprire se hanno gli stessi elementi, specificamente ai fini del test dell'unità?Come confrontare due stream in Java 8
Quello che ho ora è:
@Test
void testSomething() {
Stream<Integer> expected;
Stream<Integer> thingUnderTest;
// (...)
Assert.assertArrayEquals(expected.toArray(), thingUnderTest.toArray());
}
o in alternativa:
Assert.assertEquals(
expected.collect(Collectors.toList()),
thingUnderTest.collect(Collectors.toList()));
Ma questo significa che sto costruendo due collezioni e scartarli. Non è un problema di prestazioni, data la dimensione dei miei stream di test, ma mi chiedo se c'è un modo canonico per confrontare due flussi.
Sono abbastanza sicuro che non v'è alcun modo senza costringere i flussi in una collezione o un array come avete fatto in precedenza. – joecoder
Chiedete a ciascuno per un 'iterator()', e li attraversa in un attimo. –
BTW, questo emerge nel framework di testing per gli stessi Streams. Abbiamo specificato 18 modalità di attraversamento (ce ne sono di più, queste sono quelle che abbiamo testato) e attraversiamo lo stesso flusso tutti i modi e confrontiamo i risultati in modo identico (riordino del modulo consentito dalla semantica della libreria di flusso.) Vedi, per esempio , http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/test/java/util/stream/bootlib/java/util/stream/StreamTestScenario.java. –