From 5a1208f02947f7efa1d7a101aee8efa0a3081f98 Mon Sep 17 00:00:00 2001 From: Geoffrey Churchill Date: Sun, 31 Jul 2022 14:25:22 -0400 Subject: [PATCH 1/2] Improve `insertInStream` New version works with infinite streams and has constant space/time complexity. --- .../com/baeldung/streams/StreamAddUnitTest.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamAddUnitTest.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamAddUnitTest.java index 1fada26de5..e80a4e431b 100644 --- a/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamAddUnitTest.java +++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamAddUnitTest.java @@ -2,9 +2,13 @@ package com.baeldung.streams; import org.junit.Test; +import java.util.Iterator; import java.util.List; +import java.util.Spliterator; +import java.util.Spliterators; import java.util.stream.Collectors; import java.util.stream.Stream; +import java.util.stream.StreamSupport; import static org.junit.Assert.assertEquals; @@ -40,6 +44,16 @@ public class StreamAddUnitTest { assertEquals(resultList.get(3), (Double) 9.9); } + private static Stream insertInStream(Stream stream, T elem, int index) { + final Spliterator spliterator = stream.spliterator(); + final Iterator iterator = Spliterators.iterator(spliterator); + + return Stream.concat(Stream.concat( + Stream.generate(iterator::next).limit(index), + Stream.of(elem)), + StreamSupport.stream(spliterator, /* parallel= */ false)); + } + private Stream insertInStream(Stream stream, T elem, int index) { List result = stream.collect(Collectors.toList()); result.add(index, elem); From 8a88b469e0f4af5bdb86716b3f7a359686e80157 Mon Sep 17 00:00:00 2001 From: Geoffrey Churchill Date: Sun, 31 Jul 2022 16:26:44 -0400 Subject: [PATCH 2/2] Remove old method --- .../java/com/baeldung/streams/StreamAddUnitTest.java | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamAddUnitTest.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamAddUnitTest.java index e80a4e431b..b1d611ccef 100644 --- a/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamAddUnitTest.java +++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamAddUnitTest.java @@ -49,14 +49,8 @@ public class StreamAddUnitTest { final Iterator iterator = Spliterators.iterator(spliterator); return Stream.concat(Stream.concat( - Stream.generate(iterator::next).limit(index), - Stream.of(elem)), - StreamSupport.stream(spliterator, /* parallel= */ false)); - } - - private Stream insertInStream(Stream stream, T elem, int index) { - List result = stream.collect(Collectors.toList()); - result.add(index, elem); - return result.stream(); + Stream.generate(iterator::next).limit(index), + Stream.of(elem)), + StreamSupport.stream(spliterator, /* parallel= */ false)); } }