Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
Selected Reading
How to implement Flow.Publisher interface in Java 9?
A Publisher interface is a provider of an unbounded number of sequenced elements, publishing them according to the demand received from its Subscriber(s). In response to call Publisher.subscribe(Subscriber), the possible invocation sequences for methods on the Subscriber. It means that the onSubscribe() method, followed by the unbounded number of onNext() methods (as requested by Subscriber) followed by an onError() method, if there is a failure or an onComplete() method when no more elements available as long as Subscription is not canceled.
Syntax
<strong>public interface Publisher<T> {
public void subscribe(Subscriber<? super T><!--? super T--> s);
}</strong>
Example
import java.util.concurrent.*;
import java.util.*;
import java.util.stream.*;
class SimplePublisher implements <strong>Flow.Publisher<Integer></strong> {
private final <strong>Iterator<Integer></strong> iterator;
SimplePublisher(int count) {
this.iterator = <strong>IntStream</strong>.rangeClosed(1, count).iterator();
}
<strong>@Override</strong>
public void <strong>subscribe</strong>(<strong>F</strong><strong>low.Subscriber<? super Integer></strong><!--? super Integer--> subscriber) {
iterator.<strong>forEachRemaining</strong>(<strong>subscriber::onNext</strong>);
subscriber.<strong>onComplete()</strong>;
}
}
public class SimplePublisherImplTest {
public static void main(String args[]) {
new SimplePublisher(10).<strong>subscribe</strong>(new <strong>Flow.Subscriber<>()</strong> {
<strong>@Override</strong>
public void <strong>onSubscribe</strong>(<strong>Flow.Subscription</strong> subscription) {
}
<strong>@Override</strong>
public void <strong>onNext</strong>(Integer item) {
System.out.println("item = [" + item + "]");
}
<strong>@Override</strong>
public void <strong>onError</strong>(Throwable throwable) {
}
<strong>@Override</strong>
public void <strong>onComplete()</strong> {
System.out.println("complete");
}
});
}
}
Output
<strong>item = [1] item = [2] item = [3] item = [4] item = [5] item = [6] item = [7] item = [8] item = [9] item = [10] complete</strong>
Advertisements
