কম্পিউটার টিউটোরিয়াল

জাভা ৯-এ Flow API ব্যবহার করে রিয়েক্টিভ স্ট্রিম কীভাবে ইমপ্লিমেন্ট করবেন?

Flow API জাভা ৯ থেকে রিয়েক্টিভ স্ট্রিম স্পেসিফিকেশনের অফিসিয়াল সাপোর্ট। এটি Iterator এবং Observer প্যাটার্নের সংমিশ্রণ। Flow API একটি ইন্টারঅপারেশন স্পেসিফিকেশন, এন্ড-ইউজার API নয় যেমন RxJava।

Flow API-এর চারটি বেসিক ইন্টারফেস

  • Subscriber: Publisher-কে সাবস্ক্রাইব করে কলব্যাকের জন্য।
  • Publisher: রেজিস্টर्ड সাবস্ক্রাইবারের কাছে ডেটা আইটেমের স্ট্রিম পাবলিশ করে।
  • Subscription: পাবলিশার এবং সাবস্ক্রাইবারের লিঙ্ক।
  • Processor: পাবলিশার এবং সাবস্ক্রাইবারের মাঝপথে অবস্থান করে একটি স্ট্রিমকে অন্য স্ট্রিমে রূপান্তর করে।

উদাহরণ

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
  1. জাভা ব্যবহার করে ওপেনসিভিতে বাইল্যাটেরাল ব্লার কীভাবে ইমপ্লিমেন্ট করবেন?

  2. জাভা ব্যবহার করে ওপেনসিভিতে গাউসিয়ান ব্লার কীভাবে ইমপ্লিমেন্ট করবেন?

  3. জাভা ব্যবহার করে ওপেনসিভিতে ব্লার (অ্যভারেজিং) কীভাবে ইমপ্লিমেন্ট করবেন?

  4. জাভাতে JWindow ব্যবহার করে স্প্ল্যাশ স্ক্রিন কীভাবে বাস্তবায়ন করবেন?