From a2aeec1807f6988c36325559b798520b986a9ffa Mon Sep 17 00:00:00 2001 From: Willian Oizumi Date: Mon, 5 Apr 2021 16:54:01 -0300 Subject: [PATCH] code samples for issue BAEL-4877 --- .../conversion/EnumerationSpliterator.java | 30 ++++++++++++++++ .../EnumerationStreamConversion.java | 16 +++++++++ .../EnumerationStreamConversionUnitTest.java | 35 +++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/conversion/EnumerationSpliterator.java create mode 100644 core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/conversion/EnumerationStreamConversion.java create mode 100644 core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/conversion/EnumerationStreamConversionUnitTest.java diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/conversion/EnumerationSpliterator.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/conversion/EnumerationSpliterator.java new file mode 100644 index 0000000000..5227fcb6c4 --- /dev/null +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/conversion/EnumerationSpliterator.java @@ -0,0 +1,30 @@ +package com.baeldung.streams.conversion; + +import java.util.Enumeration; +import java.util.Spliterators.AbstractSpliterator; +import java.util.function.Consumer; + +public class EnumerationSpliterator extends AbstractSpliterator { + + private final Enumeration enumeration; + + public EnumerationSpliterator(long est, int additionalCharacteristics, Enumeration enumeration) { + super(est, additionalCharacteristics); + this.enumeration = enumeration; + } + + @Override + public boolean tryAdvance(Consumer action) { + if (enumeration.hasMoreElements()) { + action.accept(enumeration.nextElement()); + return true; + } + return false; + } + + @Override + public void forEachRemaining(Consumer action) { + while (enumeration.hasMoreElements()) + action.accept(enumeration.nextElement()); + } +} diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/conversion/EnumerationStreamConversion.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/conversion/EnumerationStreamConversion.java new file mode 100644 index 0000000000..cf041b9426 --- /dev/null +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/conversion/EnumerationStreamConversion.java @@ -0,0 +1,16 @@ +package com.baeldung.streams.conversion; + +import java.util.Enumeration; +import java.util.Spliterator; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; + +public class EnumerationStreamConversion { + + public static Stream convert(Enumeration enumeration) { + EnumerationSpliterator spliterator = new EnumerationSpliterator(Long.MAX_VALUE, Spliterator.ORDERED, enumeration); + Stream stream = StreamSupport.stream(spliterator, false); + + return stream; + } +} diff --git a/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/conversion/EnumerationStreamConversionUnitTest.java b/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/conversion/EnumerationStreamConversionUnitTest.java new file mode 100644 index 0000000000..a075312fb5 --- /dev/null +++ b/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/conversion/EnumerationStreamConversionUnitTest.java @@ -0,0 +1,35 @@ +package com.baeldung.streams.conversion; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.collection.IsIterableContainingInOrder.contains; + +import java.util.Arrays; +import java.util.List; +import java.util.Vector; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.Assert; +import org.junit.jupiter.api.Test; + +public class EnumerationStreamConversionUnitTest { + + @Test + public void givenEnumeration_whenConvertedToStream_thenNotNull() { + Vector input = new Vector<>(Arrays.asList(1, 2, 3, 4, 5)); + + Stream resultingStream = EnumerationStreamConversion.convert(input.elements()); + + Assert.assertNotNull(resultingStream); + } + + @Test + public void whenConvertedToList_thenCorrect() { + Vector input = new Vector<>(Arrays.asList(1, 2, 3, 4, 5)); + + Stream stream = EnumerationStreamConversion.convert(input.elements()); + List list = stream.filter(e -> e >= 3) + .collect(Collectors.toList()); + assertThat(list, contains(3, 4, 5)); + } +}