Jaki byłby dobry sposób porównania dwóch instancji Stream
w języku Java 8 i ustalenie, czy mają one te same elementy, w szczególności w celu testowania jednostek?Jak porównać dwa strumienie w języku Java 8
Co mam teraz jest:
@Test
void testSomething() {
Stream<Integer> expected;
Stream<Integer> thingUnderTest;
// (...)
Assert.assertArrayEquals(expected.toArray(), thingUnderTest.toArray());
}
lub alternatywnie:
Assert.assertEquals(
expected.collect(Collectors.toList()),
thingUnderTest.collect(Collectors.toList()));
Ale to oznacza, że jestem konstruowania dwa zbiory i ich wyrzuceniem. Nie jest to problem z wydajnością, biorąc pod uwagę rozmiar moich strumieni testowych, ale zastanawiam się, czy istnieje kanoniczny sposób porównania dwóch strumieni.
jestem całkiem pewny, nie ma sposobu, bez zmuszania strumienie do kolekcji lub tablicy, jak zrobiliśmy powyżej. – joecoder
Pytaj o 'iterator()' i przemierzaj je w lockstepie. –
BTW, pojawia się w ramach testowania dla samych strumieni. Określiliśmy 18 trybów przejścia (jest ich więcej, są to te, które testowaliśmy) i przechodzimy przez "ten sam" strumień na wszystkie sposoby i porównujemy, że wyniki są identyczne (renowacje modulo dozwolone przez semantykę biblioteki strumieniowej.) Zobacz na przykład , http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/test/java/util/stream/bootlib/java/util/stream/StreamTestScenario.java. –