如何用 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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP