Java 8 এ Streams API, Lambda Expressions, এবং Immutable Collections এর সমন্বয়ে বেশ কিছু নতুন বৈশিষ্ট্য যোগ করা হয়, যা কোড লেখার পদ্ধতি সহজ এবং কার্যকরী করে তোলে। এই বৈশিষ্ট্যগুলির মাধ্যমে Java ডেভেলপাররা আরও ছোট, পরিষ্কার এবং পারফরম্যান্স-ভিত্তিক কোড লিখতে সক্ষম হন। চলুন, এই তিনটি বৈশিষ্ট্য এবং তাদের ব্যবহার সম্পর্কে বিস্তারিত জানি।
1. Streams API
Streams API Java 8 এ পরিচিত একটি নতুন বৈশিষ্ট্য যা ফাংশনাল স্টাইলের ডেটা প্রসেসিংয়ের জন্য ব্যবহৃত হয়। এটি collections, arrays, বা I/O resources এর উপর কার্যক্রম (যেমন, ফিল্টার, মেপ, রিডুস, সর্টিং) করার জন্য ব্যবহার করা হয়। Streams API ডেটার সিকোয়েন্সের উপর প্যারালাল অপারেশন পরিচালনা করতে সক্ষম, যা দ্রুত এবং কার্যকরী ডেটা প্রসেসিং করতে সহায়ক।
Streams API এর ব্যবহার:
Basic Example (ফিল্টার এবং ম্যাপিং):
List<String> words = Arrays.asList("apple", "banana", "cherry", "date"); // Filter and map using Streams API List<String> result = words.stream() .filter(word -> word.startsWith("a")) .map(String::toUpperCase) .collect(Collectors.toList()); System.out.println(result); // Output: [APPLE]Parallel Streams:
Streams API এর একটি শক্তিশালী বৈশিষ্ট্য হল parallel processing। যখন ডেটা বড় বা বহু সংখ্যক উপাদান থাকে, তখন parallel stream ব্যবহার করে তা আরও দ্রুত প্রসেস করা যায়।List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); int sum = numbers.parallelStream() .mapToInt(Integer::intValue) .sum(); System.out.println(sum); // Output: 15Reduction (যেমন, Sum, Average, Min/Max):
Streams API এর মাধ্যমে কমপ্লেক্স অপারেশন যেমন সুম, গড়, সর্বনিম্ন বা সর্বোচ্চ খোঁজা সহজ।List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); int sum = numbers.stream() .reduce(0, Integer::sum); System.out.println(sum); // Output: 15
2. Lambda Expressions
Lambda Expressions হল একটি নতুন ফিচার যা Java 8 এ যুক্ত করা হয়েছে। এটি একটি অ্যানোনিমাস ফাংশন তৈরি করতে সহায়ক, যা ফাংশনাল ইন্টারফেসের ইনস্ট্যান্স তৈরি করে এবং ডেটার উপর অপারেশন দ্রুত এবং সহজভাবে সম্পাদন করতে সক্ষম হয়। Lambda expressions কে functional programming এর উপাদান হিসাবে দেখা হয়।
Lambda Expressions এর ব্যবহার:
Basic Lambda Expression:
// Traditional anonymous class Runnable r1 = new Runnable() { @Override public void run() { System.out.println("Hello from Runnable"); } }; // Using Lambda Expression Runnable r2 = () -> System.out.println("Hello from Runnable");Functional Interfaces:
Lambda expression ফাংশনাল ইন্টারফেসের সাথে কাজ করে। ফাংশনাল ইন্টারফেস এমন একটি ইন্টারফেস যা কেবলমাত্র একটি মেথড ধারণ করে।@FunctionalInterface interface Calculator { int add(int a, int b); } public class Main { public static void main(String[] args) { Calculator calculator = (a, b) -> a + b; System.out.println(calculator.add(3, 4)); // Output: 7 } }Sorting with Lambda Expression:
Lambda expressions ব্যবহার করে কাস্টম সোর্টিং করা সম্ভব।List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David"); names.sort((a, b) -> a.compareTo(b)); System.out.println(names); // Output: [Alice, Bob, Charlie, David]Using Lambda with Streams API:
Lambda expressions এবং Streams API একত্রে ব্যবহৃত হয়, যেখানে ফিল্টার, ম্যাপ এবং রিডাকশন অপারেশন করা হয়।List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); numbers.stream() .filter(n -> n % 2 == 0) .forEach(System.out::println); // Output: 2, 4
3. Immutable Collections
Immutable Collections হল এমন ধরনের সংগ্রহ (collection), যার উপাদান একবার সেট হলে, তা পরিবর্তন করা সম্ভব নয়। Java 8 এবং পরবর্তী সংস্করণে, Immutable Collections তৈরি করার জন্য নতুন API গুলি অন্তর্ভুক্ত করা হয়েছে। Immutable Collections ডেটার পরিবর্তনশীলতা থেকে রক্ষা করতে সাহায্য করে এবং সিস্টেমের নিরাপত্তা এবং পারফরম্যান্সে উন্নতি আনে।
Immutable Collections এর ব্যবহার:
Immutable List:
Java 9 এবং পরবর্তী সংস্করণে List.of() ব্যবহার করে একটি immutable list তৈরি করা যায়।List<String> immutableList = List.of("apple", "banana", "cherry"); // immutableList.add("date"); // Throws UnsupportedOperationExceptionImmutable Set:
Java 9 তে Set.of() পদ্ধতি দিয়ে একটি immutable set তৈরি করা সম্ভব।Set<String> immutableSet = Set.of("red", "green", "blue"); // immutableSet.add("yellow"); // Throws UnsupportedOperationExceptionImmutable Map:
Immutable Map তৈরি করতে Map.of() ব্যবহার করা যায়।Map<Integer, String> immutableMap = Map.of(1, "One", 2, "Two", 3, "Three"); // immutableMap.put(4, "Four"); // Throws UnsupportedOperationException- Benefits of Immutable Collections:
- Thread Safety: Immutable Collections-এর উপাদান পরিবর্তন করা সম্ভব নয়, তাই এগুলি thread-safe।
- Data Integrity: একটি immutable collection তৈরি হলে, তা কোনও অবস্থাতেই পরিবর্তন হয় না, যা ডেটার integrity বজায় রাখে।
- Performance: Immutable collections পারফরম্যান্সের দিক থেকেও কার্যকর, কারণ সেগুলি পুনরায় তৈরি না করে পুনঃব্যবহার করা যায়।
উপসংহার:
Java 8 এর Streams API, Lambda Expressions, এবং Immutable Collections এই তিনটি বৈশিষ্ট্য Java কোডকে আরও কার্যকরী, ছোট এবং পরিষ্কার করে তোলে। Streams API দিয়ে ডেটা প্রসেসিং কার্যকরী করা যায়, Lambda Expressions দিয়ে কোড সহজ এবং ফাংশনাল স্টাইলের হয়, এবং Immutable Collections ব্যবহার করে ডেটার নিরাপত্তা এবং পারফরম্যান্স নিশ্চিত করা হয়। এগুলি Java ডেভেলপমেন্টে আধুনিক পদ্ধতির প্রয়োগ এবং কার্যকরী কোড লেখার জন্য গুরুত্বপূর্ণ টুল।
Read more