উদাহরণ সহ Stream Chaining এর কৌশল

Stream Chaining এবং Filter Streams - জাভা টাপল (Java Tuples) - Java Technologies

358

Stream Chaining হলো একাধিক স্ট্রীম অপারেশন একে অপরের সাথে চেইন করা, অর্থাৎ এক স্ট্রীম অপারেশন থেকে আউটপুটকে পরবর্তী স্ট্রীম অপারেশনের ইনপুট হিসেবে ব্যবহার করা। Java 8 এ Streams API চালু হওয়ার পর, এটি Collection বা Array থেকে ডেটা প্রক্রিয়া করতে সহজ এবং কার্যকরী উপায়ে পরিণত হয়েছে।

Stream Chaining এর মাধ্যমে আপনি বিভিন্ন স্ট্রীম অপারেশন যেমন filter, map, reduce, collect ইত্যাদি একে অপরের সাথে চেইন করতে পারেন এবং ডেটা প্রসেসিংকে আরও পরিষ্কার ও সংক্ষিপ্ত করতে পারেন।


Stream Chaining এর সুবিধা

  1. একাধিক স্ট্রিম অপারেশন একত্রে প্রয়োগ: একাধিক স্ট্রিম অপারেশনকে একত্রে লেখা যায় যা কোডের সরলতা বাড়ায়।
  2. Lazy Evaluation: স্ট্রিম চেইনিংয়ে অপারেশনগুলো lazy evaluation অনুযায়ী কাজ করে, অর্থাৎ স্ট্রিমের মধ্যে যতটুকু ডেটা প্রক্রিয়া করা প্রয়োজন ততটুকু শুধুমাত্র প্রসেস করা হয়।
  3. Functional Style Programming: স্ট্রিম চেইনিং ফাংশনাল প্রোগ্রামিং স্টাইল অনুসরণ করে, যা কোডের উন্নত পরিষ্কারতা এবং কমপ্যাক্টনেস নিশ্চিত করে।

Stream Chaining উদাহরণ

১. List থেকে ডেটা ফিল্টার করা, ম্যাপ করা এবং সংগ্রহ করা

ধরা যাক, আমাদের কাছে একটি List আছে, এবং আমরা সেই লিস্ট থেকে শুধুমাত্র ইভেন নম্বর গুলি বের করতে চাই, তারপর প্রতিটি সংখ্যাকে দ্বিগুণ করে আউটপুটে ফিরিয়ে দেবো।

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamChainingExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        // স্ট্রিম চেইনিং ব্যবহার করে ফিল্টার, ম্যাপ এবং কালেক্ট করা
        List<Integer> result = numbers.stream()
                                      .filter(n -> n % 2 == 0)          // ফিল্টার: শুধুমাত্র ইভেন নম্বর রাখুন
                                      .map(n -> n * 2)                  // ম্যাপ: প্রতিটি সংখ্যাকে দ্বিগুণ করুন
                                      .collect(Collectors.toList());    // কালেক্ট: লিস্টে সংগ্রহ করুন

        System.out.println(result); // আউটপুট: [4, 8, 12, 16, 20]
    }
}

ব্যাখ্যা:

  1. filter(n -> n % 2 == 0): শুধুমাত্র ইভেন নম্বর ফিল্টার করা হচ্ছে।
  2. map(n -> n * 2): প্রতিটি ইভেন নম্বর কে দ্বিগুণ করা হচ্ছে।
  3. collect(Collectors.toList()): ফলস্বরূপ ডেটা একটি নতুন List তে সংগ্রহ করা হচ্ছে।

২. String এর উপর Stream Chaining ব্যবহার করা

এখানে একটি উদাহরণ দেওয়া হয়েছে যেখানে String একটি List এর মধ্যে রূপান্তরিত হচ্ছে, এবং তারপর একটি নির্দিষ্ট কন্ডিশন মেনে স্ট্রিম চেইনিং কার্যকর করা হচ্ছে।

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamChainingStrings {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("java", "stream", "chaining", "example", "tutorial");

        // স্ট্রিম চেইনিং ব্যবহার করে বড় হাতের অক্ষরে রূপান্তর এবং লম্বা শব্দগুলির ফিল্টার
        List<String> result = words.stream()
                                   .filter(word -> word.length() > 4)       // ফিল্টার: ৪টির বেশি অক্ষর যুক্ত শব্দ
                                   .map(String::toUpperCase)                // ম্যাপ: শব্দগুলিকে বড় হাতের অক্ষরে রূপান্তর করা
                                   .collect(Collectors.toList());           // কালেক্ট: লিস্টে সংগ্রহ করা

        System.out.println(result); // আউটপুট: [STREAM, CHAINING, EXAMPLE, TUTORIAL]
    }
}

ব্যাখ্যা:

  1. filter(word -> word.length() > 4): শুধুমাত্র ৪টি বা তার বেশি অক্ষরের শব্দ ফিল্টার করা হচ্ছে।
  2. map(String::toUpperCase): প্রতিটি শব্দকে বড় হাতের অক্ষরে রূপান্তর করা হচ্ছে।
  3. collect(Collectors.toList()): প্রাপ্ত ফলাফল একটি List তে রূপান্তরিত করা হচ্ছে।

৩. Reduce এবং Collect ব্যবহার করে স্ট্রিম চেইনিং

এখন, একটি উদাহরণ দেখি যেখানে reduce() ফাংশন ব্যবহার করে সব সংখ্যার যোগফল বের করা হচ্ছে এবং তারপর ফলাফল লিস্টে সংগ্রহ করা হচ্ছে।

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

public class StreamReduceExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

        // স্ট্রিম চেইনিং ব্যবহার করে reduce এবং collect
        Optional<Integer> result = numbers.stream()
                                          .reduce((a, b) -> a + b);  // সব সংখ্যার যোগফল বের করা

        result.ifPresent(System.out::println); // আউটপুট: 15
    }
}

ব্যাখ্যা:

  1. reduce((a, b) -> a + b): সব সংখ্যার যোগফল বের করা হচ্ছে।
  2. Optional<Integer>: ফলস্বরূপ যোগফল Optional রিটার্ন হবে, কারণ স্ট্রিমে শূন্য উপাদান থাকতে পারে।

Stream Chaining এর সাথে Java Tuples ব্যবহার

Java Tuples ব্যবহার করে স্ট্রিম চেইনিং এর মাধ্যমে প্রাপ্ত ডেটার সাথে অতিরিক্ত প্রপার্টি সংরক্ষণ করতে পারেন। যেমন, আমরা Pair (যেমন Pair<String, Integer>) ব্যবহার করে বিভিন্ন প্রোপার্টি একত্রে সংরক্ষণ করতে পারি।

কোড উদাহরণ: Tuple ব্যবহার করে Stream Chaining

import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang3.tuple.Pair;

public class TupleStreamChainingExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);

        // Stream Chaining এর মাধ্যমে Tuple ব্যবহার করে প্রক্রিয়া করা
        List<Pair<String, Integer>> result = numbers.stream()
                                                    .filter(n -> n % 2 == 0)           // শুধুমাত্র ইভেন নম্বর ফিল্টার করা
                                                    .map(n -> Pair.of("Number", n * 2)) // প্রতি ইভেন নম্বরকে দ্বিগুণ করে Tuple তৈরি করা
                                                    .collect(Collectors.toList());      // লিস্টে সন্নিবেশ করা

        result.forEach(pair -> System.out.println(pair.getLeft() + ": " + pair.getRight()));
    }
}

আউটপুট:

Number: 4
Number: 8
Number: 12

এখানে:

  • Pair.of("Number", n * 2) ব্যবহার করে, আমরা প্রত্যেকটি ইভেন নম্বরের জন্য একটি Tuple তৈরি করেছি।
  • Pair এর প্রথম অংশে "Number" স্ট্রিং এবং দ্বিতীয় অংশে দ্বিগুণ করা নম্বর রাখা হয়েছে।

  • Stream Chaining একটি শক্তিশালী এবং প্রভাবশালী কৌশল যা Java Streams API এর মাধ্যমে একাধিক স্ট্রিম অপারেশন একত্রে করে ডেটা প্রক্রিয়া করা সহজ করে তোলে।
  • Java Tuples ব্যবহার করে, আপনি স্ট্রিম চেইনিংয়ের ফলস্বরূপ ডেটা এবং তার প্রোপার্টি একত্রে সংরক্ষণ করতে পারেন, যা কোডকে আরও পরিষ্কার এবং কার্যকরী করে তোলে।
Content added By
Promotion

Are you sure to start over?

Loading...