Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java 9에서 Flow.Publisher 인터페이스를 구현하는 방법은 무엇입니까?


게시자 인터페이스는 구독자로부터 받은 요구에 따라 게시하는 무한한 수의 순차 요소를 제공합니다. . Publisher.subscribe(Subscriber) 호출에 대한 응답으로 , 구독자의 메소드에 대한 가능한 호출 시퀀스 . onSubscribe() 메소드 다음에 무한한 수의 onNext() 방법(구독자가 요청한 대로 ) 다음에 onError() 메소드, 실패 또는 onComplete()가 있는 경우 구독 동안 사용할 수 있는 요소가 더 이상 없을 때의 방법 취소되지 않습니다.

구문

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

예시

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");
         }
      });
   }
}

출력

item = [1]
item = [2]
item = [3]
item = [4]
item = [5]
item = [6]
item = [7]
item = [8]
item = [9]
item = [10]
complete