thenApply(), thenAccept(), এবং thenCompose() এর ব্যবহার

CompletableFuture এবং Asynchronous Programming - জাভা কনকারেন্সি (Java Concurrency) - Java Technologies

332

জাভার CompletableFuture API হল একটি শক্তিশালী টুল, যা অ্যাসিঙ্ক্রোনাস অপারেশনগুলিকে সহজ এবং কার্যকর করে। এর মধ্যে thenApply(), thenAccept(), এবং thenCompose() হলো কয়েকটি গুরুত্বপূর্ণ মেথড। এগুলো চেইনিং এবং কম্পোজিশনের জন্য ব্যবহৃত হয়।


১. thenApply()

  • ব্যাখ্যা:
    • এটি একটি অ্যাসিঙ্ক্রোনাস কম্পিউটেশন-এর ফলাফল গ্রহণ করে এবং একটি নতুন মান রিটার্ন করে।
    • এটি Function<T, R> গ্রহণ করে, যেখানে T হল পূর্ববর্তী ধাপের ফলাফল এবং R হল নতুন ফলাফল।

ব্যবহার:

import java.util.concurrent.CompletableFuture;

public class ThenApplyExample {
    public static void main(String[] args) {
        CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
            System.out.println("Fetching data...");
            return "Hello";
        });

        CompletableFuture<String> transformedFuture = future.thenApply(data -> {
            System.out.println("Transforming data...");
            return data + ", World!";
        });

        // ফলাফল প্রিন্ট করা
        transformedFuture.thenAccept(System.out::println);
    }
}

আউটপুট:

Fetching data...
Transforming data...
Hello, World!

২. thenAccept()

  • ব্যাখ্যা:
    • এটি একটি অ্যাসিঙ্ক্রোনাস অপারেশনের ফলাফল গ্রহণ করে এবং এটি ব্যবহার করে কিছু কাজ করে।
    • এটি Consumer<T> গ্রহণ করে এবং কোনো মান রিটার্ন করে না।

ব্যবহার:

import java.util.concurrent.CompletableFuture;

public class ThenAcceptExample {
    public static void main(String[] args) {
        CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
            System.out.println("Fetching data...");
            return "Hello, World!";
        });

        // ফলাফল গ্রহণ এবং প্রিন্ট করা
        future.thenAccept(result -> {
            System.out.println("Result: " + result);
        });
    }
}

আউটপুট:

Fetching data...
Result: Hello, World!

৩. thenCompose()

  • ব্যাখ্যা:
    • এটি একটি কম্পোজিশন মেথড, যা একটি অ্যাসিঙ্ক্রোনাস অপারেশন সম্পন্ন হওয়ার পরে আরেকটি CompletableFuture অপারেশন চালায়।
    • এটি Function<T, CompletableFuture<U>> গ্রহণ করে।

ব্যবহার:

import java.util.concurrent.CompletableFuture;

public class ThenComposeExample {
    public static void main(String[] args) {
        CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
            System.out.println("Fetching user...");
            return "User123";
        });

        CompletableFuture<String> future2 = future1.thenCompose(user -> {
            System.out.println("Fetching account for: " + user);
            return CompletableFuture.supplyAsync(() -> "Account567");
        });

        // চূড়ান্ত ফলাফল প্রিন্ট করা
        future2.thenAccept(account -> {
            System.out.println("Account fetched: " + account);
        });
    }
}

আউটপুট:

Fetching user...
Fetching account for: User123
Account fetched: Account567

সবগুলো মিলে একটি উদাহরণ

import java.util.concurrent.CompletableFuture;

public class CompletableFutureExample {
    public static void main(String[] args) {
        CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
            System.out.println("Fetching number...");
            return 10;
        });

        // `thenApply()` দিয়ে সংখ্যা দ্বিগুণ করা
        CompletableFuture<Integer> doubledFuture = future.thenApply(number -> {
            System.out.println("Doubling the number...");
            return number * 2;
        });

        // `thenAccept()` দিয়ে ফলাফল প্রিন্ট করা
        doubledFuture.thenAccept(result -> {
            System.out.println("Doubled Result: " + result);
        });

        // `thenCompose()` দিয়ে আরও একটি অ্যাসিঙ্ক্রোনাস অপারেশন
        CompletableFuture<Void> finalFuture = doubledFuture.thenCompose(result -> {
            System.out.println("Processing with result...");
            return CompletableFuture.runAsync(() -> {
                System.out.println("Final Result Processed: " + (result + 5));
            });
        });

        finalFuture.join(); // মূল থ্রেড অপেক্ষা করবে
    }
}

আউটপুট:

Fetching number...
Doubling the number...
Doubled Result: 20
Processing with result...
Final Result Processed: 25

তুলনামূলক পার্থক্য

মেথডকাজরিটার্ন টাইপ
thenApplyফলাফল রূপান্তর করে এবং নতুন মান রিটার্ন করে।CompletableFuture<U>
thenAcceptফলাফল গ্রহণ করে এবং কিছু কাজ করে, তবে কিছু রিটার্ন করে না।CompletableFuture<Void>
thenComposeএকটি অ্যাসিঙ্ক্রোনাস ফলাফল নিয়ে আরও একটি অপারেশন চালায়।CompletableFuture<U>

  • thenApply(): রূপান্তরের জন্য ব্যবহৃত হয়।
  • thenAccept(): কোনো অ্যাকশনের জন্য ব্যবহৃত হয়।
  • thenCompose(): চেইনড অ্যাসিঙ্ক্রোনাস অপারেশনগুলির জন্য ব্যবহৃত হয়।

এগুলো ব্যবহার করে জটিল অ্যাসিঙ্ক্রোনাস অপারেশনগুলি সহজে পরিচালনা করা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...