In this post, I am going to explain how to get the Stream from an Enumeration in Java.
Step 1: Get an instance of Spliterator from Enumeration.
Spliterator<T> spliterator = new Spliterators.AbstractSpliterator<T>(Long.MAX_VALUE, Spliterator.ORDERED) {
@Override
public void forEachRemaining(Consumer<? super T> consumer) {
while (enumeration.hasMoreElements()) {
consumer.accept(enumeration.nextElement());
}
}
@Override
public boolean tryAdvance(Consumer<? super T> consumer) {
if (enumeration.hasMoreElements()) {
consumer.accept(enumeration.nextElement());
return true;
}
return false;
}
};
As you see above snippet, I defined the Spliterator instance by overriding forEachRemaining and tryAdvance methods.
‘forEachRemaining’ method perform the given action for each remaining element, sequentially in the current thread, until all elements have been processed or the action throws an exception.
‘tryAdvance’ method performs action on any remaining element in the spliterator and return true if the element exists, else false.
Step 2: Use StreamSupport.stream method to get the stream from a spliterator.
public static <T> Stream<T> stream(Spliterator<T> spliterator, boolean parallel)
Creates a new sequential or parallel Stream from a Spliterator. If the argument 'parallel' is set to true then the returned stream is a parallel stream. If the argument 'parallel' is set to false then the returned stream is a sequential stream.
Example
StreamSupport.stream(spliterator, false);
Find the below working application.
StreamFromEnumeration.java
package com.sample.app.streams;
import java.util.Enumeration;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.StringTokenizer;
import java.util.function.Consumer;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
public class StreamFromEnumeration {
public static <T> Stream<T> toStream(final Enumeration<T> enumeration) {
Spliterator<T> spliterator = new Spliterators.AbstractSpliterator<T>(Long.MAX_VALUE, Spliterator.ORDERED) {
@Override
public void forEachRemaining(Consumer<? super T> consumer) {
while (enumeration.hasMoreElements()) {
consumer.accept(enumeration.nextElement());
}
}
@Override
public boolean tryAdvance(Consumer<? super T> consumer) {
if (enumeration.hasMoreElements()) {
consumer.accept(enumeration.nextElement());
return true;
}
return false;
}
};
return StreamSupport.stream(spliterator, false);
}
public static void main(String[] args) {
String str = "Hello there, How are you!!!!";
StringTokenizer tokenizer = new StringTokenizer(str, " ");
toStream(tokenizer).forEach(System.out::println);
}
}
Output
Hello there, How are you!!!!
You may like
Get the last element from a collection in Java
Implement stack data structure using List
Get a composite unmodifiable array list from two arrays
No comments:
Post a Comment