How to implement Flow.Publisher interface in Java 9?

JavaObject Oriented ProgrammingProgramming

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

public interface Publisher<T> {
   public void subscribe(Subscriber<? super T> s);
}

Example

import java.util.concurrent.*;
import java.util.*;
import java.util.stream.*;

class SimplePublisher implements Flow.Publisher<Integer> {
   private final Iterator<Integer> iterator;
   SimplePublisher(int count) {
      this.iterator = IntStream.rangeClosed(1, count).iterator();
   }
   @Override
   public void subscribe(Flow.Subscriber<? super Integer> subscriber) {
      iterator.forEachRemaining(subscriber::onNext);
      subscriber.onComplete();
   }
}

public class SimplePublisherImplTest {
   public static void main(String args[]) {
      new SimplePublisher(10).subscribe(new Flow.Subscriber<>() {
         @Override
         public void onSubscribe(Flow.Subscription subscription) {
         }
         @Override
         public void onNext(Integer item) {
            System.out.println("item = [" + item + "]");
         }
         @Override
         public void onError(Throwable throwable) {
         }
         @Override
         public void onComplete() {
            System.out.println("complete");
         }
      });
   }
}

Output

item = [1]
item = [2]
item = [3]
item = [4]
item = [5]
item = [6]
item = [7]
item = [8]
item = [9]
item = [10]
complete
raja
Published on 16-Apr-2020 10:36:29
Advertisements