Computer >> Máy Tính >  >> Lập trình >> Java

Làm thế nào để triển khai giao diện Flow.Publisher trong Java 9?


A Nhà xuất bản interface là nhà cung cấp số lượng phần tử được sắp xếp theo trình tự không giới hạn, xuất bản chúng theo nhu cầu nhận được từ (các) người đăng ký của nó . Đáp lại lời kêu gọi Publisher.subscribe (Người đăng ký) , chuỗi lệnh gọi có thể có cho các phương thức trên Người đăng ký . Có nghĩa là onSubscribe () , theo sau là số onNext () không bị giới hạn phương pháp (theo yêu cầu của Người đăng ký ) theo sau là onError () , nếu có lỗi hoặc onComplete () khi không còn phần tử nào nữa miễn là Đăng ký không bị hủy.

Cú pháp

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

Ví dụ

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

Đầu ra

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