ফ্লো API৷ জাভা 9 থেকে প্রতিক্রিয়াশীল স্ট্রীম স্পেসিফিকেশনের জন্য অফিসিয়াল সমর্থন। এটি উভয় ইটারেটর এর সংমিশ্রণ এবং পর্যবেক্ষক নিদর্শন ফ্লো API এটি একটি ইন্টারঅপারেশন স্পেসিফিকেশন এবং RxJava এর মত একটি এন্ড-ইউজার API নয় .
ফ্লো API৷ চারটি মৌলিক ইন্টারফেস নিয়ে গঠিত:
- সাবস্ক্রাইবার : গ্রাহক কলব্যাকের জন্য প্রকাশকের সাবস্ক্রাইব করে।
- প্রকাশক৷ : প্রকাশক নিবন্ধিত গ্রাহকদের কাছে ডেটা আইটেমগুলির স্ট্রিম প্রকাশ করে৷ ৷
- সাবস্ক্রিপশন : প্রকাশক এবং গ্রাহকের মধ্যে লিঙ্ক।
- প্রসেসর : প্রসেসরটি প্রকাশক এবং গ্রাহকের মধ্যে বসে এবং একটি স্ট্রীমকে অন্যটিতে রূপান্তরিত করে৷
নীচের উদাহরণে, আমরা একটি মৌলিক গ্রাহক তৈরি করেছি যা একটি ডেটা অবজেক্টের জন্য জিজ্ঞাসা করে, এটি প্রিন্ট করে এবং আরও একটির জন্য জিজ্ঞাসা করে। আমরা Java (SubmissionPublisher দ্বারা প্রদত্ত একটি প্রকাশক বাস্তবায়ন ব্যবহার করতে পারি৷ ) আমাদের সেশন সম্পূর্ণ করতে।
উদাহরণ
import java.util.concurrent.Flow;
import java.util.List;
import java.util.concurrent.SubmissionPublisher;
class MySubscriber<T>implements Flow.Subscriber<T> {
private Flow.Subscription subscription;
@Override
public void onSubscribe(Flow.Subscription subscription) {
this.subscription = subscription;
this.subscription.request(1);
}
@Override
public void onNext(T item) {
System.out.println(item);
subscription.request(1);
}
@Override
public void onError(Throwable throwable) {
throwable.printStackTrace();
}
@Override
public void onComplete() {
System.out.println("Done");
}
}
// main class
public class FlowTest {
public static void main(String args[]) {
List<String> items = List.of("1", "2", "3", "4", "5", "6", "7", "8", "9", "10");
SubmissionPublisher<String> publisher = new SubmissionPublisher<>();
publisher.subscribe(new MySubscriber<>());
items.forEach(s -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
publisher.submit(s);
});
publisher.close();
}
} আউটপুট
1 2 3 4 5 6 7 8 9 10 Done