Streams এবং Immutable Collections এর ব্যবহার

Immutable Data Structures - জাভা ফাংশনাল প্রোগ্রামিং (Java Functional Programming) - Java Technologies

316

Java Functional Programming ধারণায় Streams এবং Immutable Collections দুটি গুরুত্বপূর্ণ উপাদান, যা Java 8 এবং পরবর্তী সংস্করণে যুক্ত করা হয়েছে। Streams API ব্যবহার করে আপনি ডেটা প্রক্রিয়া করার জন্য functional-style কোড লিখতে পারেন, এবং Immutable Collections ব্যবহার করে আপনি ডেটা সুরক্ষিত এবং পরিবর্তনশীল (mutable) না রাখার সুবিধা পাবেন। এগুলোর সঠিক ব্যবহার আপনার কোডের কার্যকারিতা এবং নিরাপত্তা উন্নত করতে সহায়ক।

এখানে Streams API এবং Immutable Collections এর ব্যবহার এবং তাদের মধ্যে সম্পর্ক নিয়ে আলোচনা করা হবে।

1. Java Streams API: Overview

Streams API হল একটি functional-style API যা Java 8-এ চালু হয়েছে। এর মাধ্যমে আপনি Collection বা array থেকে ডেটা নিয়ে বিভিন্ন ধরনের ফাংশনাল অপারেশন (যেমন, filter, map, reduce, collect) করতে পারেন। Streams sequence of elements হিসেবে ডেটা কাজ করে এবং এটি immutable হয় (অর্থাৎ, কোনো স্ট্রিমের উপাদান পরিবর্তন করা সম্ভব নয়)।

Streams এর কিছু মূল বৈশিষ্ট্য:

  • No Storage: স্ট্রিম কোনো ডেটা সংরক্ষণ করে না, এটি ডেটার উপরে অপারেশন প্রয়োগ করে।
  • Functional in Nature: স্ট্রিম অপারেশনগুলি ফাংশনাল স্টাইলে কাজ করে।
  • Laziness-seeking: স্ট্রিম অপারেশনগুলো lazy হিসেবে কাজ করে, অর্থাৎ তারা ডেটার উপরে কাজ শুরু করে না যতক্ষণ না শেষ অপারেশন প্রয়োগ না হয়।
  • Possibly Unbounded: স্ট্রিমের আকার সীমাহীন হতে পারে, যেমন ইনপুট ডেটার আকার বড় হতে পারে।

2. Java Streams API-এর উদাহরণ

a) Stream creation from a Collection

Stream তৈরি করার জন্য stream() মেথড ব্যবহার করা হয়, যা Collection থেকে স্ট্রিম তৈরি করে।

import java.util.*;
import java.util.stream.*;

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

        // Creating a stream from the list
        Stream<Integer> numberStream = numbers.stream();

        // Printing the stream elements
        numberStream.forEach(System.out::println);
    }
}

ব্যাখ্যা:

  • numbers.stream() থেকে একটি স্ট্রিম তৈরি করা হয়েছে এবং forEach() ব্যবহার করে স্ট্রিমের প্রতিটি উপাদান প্রিন্ট করা হয়েছে।

b) Stream Operations: filter() এবং map()

Stream অপারেশন যেমন filter() এবং map() ফাংশনাল প্রোগ্রামিং অপারেশন ব্যবহার করে স্ট্রিমের উপাদানগুলো পরিবর্তন এবং ফিল্টার করতে ব্যবহার করা হয়।

import java.util.*;
import java.util.stream.*;

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

        // Filtering even numbers and then multiplying by 2
        List<Integer> result = numbers.stream()
                                      .filter(n -> n % 2 == 0)  // Filtering even numbers
                                      .map(n -> n * 2)  // Multiplying each even number by 2
                                      .collect(Collectors.toList());  // Collecting results into a List

        System.out.println(result);  // Output: [4, 8, 12, 16, 20]
    }
}

ব্যাখ্যা:

  • filter(): স্ট্রিমের উপাদানগুলি ফিল্টার করতে ব্যবহৃত হয় (এখানে শুধু even numbers নেয়া হচ্ছে)।
  • map(): স্ট্রিমের প্রতিটি উপাদানকে একটি নতুন মানে রূপান্তরিত করতে ব্যবহৃত হয় (এখানে প্রতিটি even number কে ২ দ্বারা গুণ করা হয়েছে)।

c) Stream Reduce Example

reduce() ব্যবহার করে আপনি স্ট্রিমের উপাদানগুলোকে একত্রিত করতে পারেন। এটি সাধারণত সমষ্টি (sum), গড় (average) ইত্যাদি হিসাব করতে ব্যবহার করা হয়।

import java.util.*;
import java.util.stream.*;

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

        // Reducing to find sum of numbers
        int sum = numbers.stream()
                          .reduce(0, (a, b) -> a + b);  // Starting with 0, summing all elements

        System.out.println("Sum: " + sum);  // Output: 15
    }
}

ব্যাখ্যা:

  • reduce(): এটি স্ট্রিমের উপাদানগুলোকে একত্রিত করে একটি একক মান তৈরি করে (এখানে সংখ্যা গুলোর যোগফল বের করা হয়েছে)।

3. Immutable Collections: Overview

Immutable Collections হল সেই সংগ্রহ (Collection) যা একবার তৈরি হলে পরিবর্তন করা যায় না। এটি functional programming এ একটি গুরুত্বপূর্ণ ধারণা, কারণ এটি ডেটার অপরিবর্তনীয়তা এবং সুরক্ষা নিশ্চিত করে। Immutable Collections ব্যবহারের মাধ্যমে আপনি ডেটার প্রতি কোনও পরিবর্তন বা আপডেট হতে বাধা দেন এবং এটি thread-safe তৈরি করে, বিশেষত যখন আপনার অ্যাপ্লিকেশন মাল্টি-থ্রেডেড হয়।

Immutable Collection Examples:

Java-তে কিছু Immutable Collections ব্যবহারের উপায় হল:

  • List: List.of()
  • Set: Set.of()
  • Map: Map.of()

a) Creating Immutable List

import java.util.*;

public class ImmutableListExample {
    public static void main(String[] args) {
        // Creating an immutable List
        List<String> immutableList = List.of("Apple", "Banana", "Cherry");

        // Attempting to modify the list will throw an UnsupportedOperationException
        // immutableList.add("Date"); // Throws UnsupportedOperationException

        System.out.println("Immutable List: " + immutableList);
    }
}

ব্যাখ্যা:

  • List.of() ব্যবহারের মাধ্যমে একটি immutable list তৈরি করা হয়েছে। এটি পরিবর্তনযোগ্য নয়।

b) Creating Immutable Set

import java.util.*;

public class ImmutableSetExample {
    public static void main(String[] args) {
        // Creating an immutable Set
        Set<String> immutableSet = Set.of("Red", "Green", "Blue");

        // Attempting to modify the set will throw an UnsupportedOperationException
        // immutableSet.add("Yellow"); // Throws UnsupportedOperationException

        System.out.println("Immutable Set: " + immutableSet);
    }
}

ব্যাখ্যা:

  • Set.of() ব্যবহারের মাধ্যমে একটি immutable set তৈরি করা হয়েছে।

c) Creating Immutable Map

import java.util.*;

public class ImmutableMapExample {
    public static void main(String[] args) {
        // Creating an immutable Map
        Map<String, Integer> immutableMap = Map.of("Apple", 1, "Banana", 2, "Cherry", 3);

        // Attempting to modify the map will throw an UnsupportedOperationException
        // immutableMap.put("Date", 4); // Throws UnsupportedOperationException

        System.out.println("Immutable Map: " + immutableMap);
    }
}

ব্যাখ্যা:

  • Map.of() ব্যবহারের মাধ্যমে একটি immutable map তৈরি করা হয়েছে।

4. Advantages of Immutable Collections

  • Thread-Safety: Immutable Collections সহজে thread-safe হয়, কারণ তাদের কোনো পরিবর্তন করা সম্ভব নয়। তাই মাল্টি-থ্রেডেড অ্যাপ্লিকেশনে ডেটার সুরক্ষা সহজেই বজায় থাকে।
  • Reliability: যেহেতু immutable objects পরিবর্তনশীল নয়, এটি কোডের পূর্বানুমানযোগ্যতা এবং নির্ভরযোগ্যতা নিশ্চিত করে।
  • Safety from Side Effects: Immutable collections ব্যাবহার করার মাধ্যমে কোডের মধ্যে সাইড-এফেক্ট কমানো সম্ভব, কারণ একই ডেটা একাধিক জায়গায় শেয়ার করা হলেও তা পরিবর্তন হতে পারে না।

5. Streams এবং Immutable Collections এর সম্পর্ক

Streams এবং Immutable Collections একসাথে ব্যবহার করলে আপনি শক্তিশালী এবং নির্ভরযোগ্য functional programming স্টাইল কোড লিখতে পারেন। স্ট্রিমের অপারেশনগুলো ডেটার উপর অপারেশন করবে, কিন্তু কোন পরিবর্তন করবে না, যা immutable collections এর সাথে যুক্ত করা হলে আরও নিরাপদ ও কার্যকরী হয়।

Example of Using Streams with Immutable Collections:

import java.util.*;
import java.util.stream.*;

public class StreamsAndImmutableCollections {
    public static void main(String[] args) {
        List<String> fruits = List.of("Apple", "Banana", "Cherry", "Date");

        // Using Stream with an Immutable Collection
        fruits.stream()
              .filter(fruit -> fruit.startsWith("B"))
              .forEach(System.out::println);
    }
}

ব্যাখ্যা:

  • এখানে, Immutable List (List.of) ব্যবহার করা হয়েছে এবং স্ট্রিম অপারেশন filter এবং forEach দিয়ে ফলাফল পাওয়া যাচ্ছে।
  • Streams-এর মাধ্যমে ডেটা প্রক্রিয়া হলেও, এটি immutable collection এর উপরে কোনো পরিবর্তন করবে না, বরং একটি নতুন স্ট্রিম রিটার্ন করবে।

Streams API এবং Immutable Collections Java-তে functional programming এর জন্য অত্যন্ত শক্তিশালী টুলস। Streams ব্যবহারের মাধ্যমে আপনি ডেটার ওপর কার্যকরী এবং declarative অপারেশন করতে পারেন, এবং Immutable Collections ব্যবহারের মাধ্যমে আপনি নিরাপদ এবং অপরিবর্তনীয় ডেটা তৈরি করতে পারেন। এই দুটি ধারণা একসাথে ব্যবহার করলে আপনি একটি নির্ভরযোগ্য, কার্যকরী এবং thread-safe অ্যাপ্লিকেশন তৈরি করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...