Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Cách triển khai interface Flow.Publisher trong Java 9?

Publisher interface là provider của số lượng không giới hạn phần tử sequenced, phát hành theo nhu cầu từ Subscriber(s). Phản hồi gọi Publisher.subscribe(Subscriber), chuỗi invocation có thể cho method trên Subscriber. Nghĩa là method onSubscribe(), theo sau số lượng không giới hạn onNext() (theo yêu cầu Subscriber) theo sau onError() nếu thất bại hoặc onComplete() khi không còn phần tử miễn là Subscription 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");
            }
        });
    }
}

Kết quả

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