如何用 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

更新時間: 2020-04-16

687 次瀏覽

開啟你的 事業

透過完成課程獲得認證

開始
廣告
© . All rights reserved.