Java 8 এ অনেক নতুন functional programming ফিচার যুক্ত করা হয়েছে, যেমন lambda expressions, streams, default methods, Optional এবং আরও অনেক কিছু। এসব ফিচারের সাথে regular expressions (Regex) ব্যবহারের মাধ্যমে কার্যকারিতা আরও উন্নত করা যেতে পারে। নিচে কিছু Java 8 এর advanced features এবং Regex এর integration কিভাবে করা যেতে পারে, তা আলোচনা করা হয়েছে।
1. Lambda Expressions এবং Regex Integration
Lambda expressions Java 8 এ একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা আপনাকে ছোট ফাংশনগুলি লিখতে সাহায্য করে। আপনি lambda expressions ব্যবহার করে Regex matching এবং filtering এর মতো কাজ সহজেই করতে পারেন।
Lambda Expressions ব্যবহার করে Regex Matching:
ধরা যাক, একটি তালিকা আছে যেটিতে বিভিন্ন স্ট্রিং রয়েছে এবং আপনি চাইছেন Regex ব্যবহার করে এই স্ট্রিং গুলোর মধ্যে কিছু বিশেষ প্যাটার্ন খুঁজে বের করতে।
import java.util.*;
import java.util.regex.*;
import java.util.stream.*;
public class RegexLambdaExample {
public static void main(String[] args) {
List<String> strings = Arrays.asList("apple", "banana", "123", "cherry", "abc123");
// Regex pattern to match words containing numbers
String pattern = ".*\\d+.*";
// Using lambda to filter and match regex
strings.stream()
.filter(s -> s.matches(pattern)) // Lambda expression for regex matching
.forEach(System.out::println);
}
}
আউটপুট:
123
abc123
ব্যাখ্যা:
stream()মেথডটি একটি stream তৈরি করে যা পরবর্তীতেfilter()মেথডের মাধ্যমে প্যাটার্নের সাথে মেলে এমন স্ট্রিং খুঁজে বের করে।matches()মেথডটি স্ট্রিংয়ের সাথে Regex প্যাটার্ন মেলানোর জন্য ব্যবহৃত হয়।- Lambda expression
s -> s.matches(pattern)স্ট্রিংগুলো ফিল্টার করার জন্য ব্যবহার করা হয়েছে।
2. Streams API এবং Regex Filtering
Streams API Java 8 এর অন্যতম গুরুত্বপূর্ণ বৈশিষ্ট্য, যা আপনাকে ডেটার উপর কার্যকরীভাবে কাজ করার সুযোগ দেয়। Regex এর সাথে Streams API ব্যবহার করে আপনি বড় ডেটাসেটের উপর কার্যকরীভাবে Regex মেলানোর কাজ করতে পারেন।
Streams API ব্যবহার করে Regex Matching:
import java.util.*;
import java.util.regex.*;
import java.util.stream.*;
public class RegexStreamsExample {
public static void main(String[] args) {
List<String> strings = Arrays.asList("apple", "banana", "123", "cherry", "abc123");
// Regex pattern to match strings starting with 'a'
String pattern = "^a.*";
// Using Streams API and Regex to filter strings
List<String> result = strings.stream()
.filter(s -> s.matches(pattern)) // Matching regex
.collect(Collectors.toList());
result.forEach(System.out::println);
}
}
আউটপুট:
apple
abc123
ব্যাখ্যা:
stream()দ্বারা স্ট্রিং তালিকাটি স্ট্রিমে রূপান্তরিত হয়েছে।filter()মেথডে Regex matching ব্যবহার করা হয়েছেs.matches(pattern)।- ফলস্বরূপ, শুধুমাত্র সেই স্ট্রিংগুলো প্রিন্ট করা হবে যেগুলোর প্রথম অক্ষর 'a'।
3. Optional Class এবং Regex Validation
Optional ক্লাসটি Java 8 এর একটি ফিচার যা নাল ভ্যালু প্রতিরোধে সহায়ক। যখন আপনি একটি স্ট্রিংয়ের ওপর Regex validation করতে চান, তখন Optional ব্যবহার করে আপনি সেফভাবে null checks করতে পারেন।
Optional Class ব্যবহার করে Regex Validation:
import java.util.Optional;
import java.util.regex.*;
public class RegexOptionalExample {
public static void main(String[] args) {
// Regex pattern to validate email
String pattern = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
// Sample email
String email = "example@example.com";
// Using Optional to handle null safely
Optional<String> optionalEmail = Optional.ofNullable(email);
boolean isValidEmail = optionalEmail
.filter(e -> e.matches(pattern)) // Regex validation
.isPresent(); // Check if valid email exists
if (isValidEmail) {
System.out.println("Valid email address.");
} else {
System.out.println("Invalid email address.");
}
}
}
আউটপুট:
Valid email address.
ব্যাখ্যা:
Optional.ofNullable(email)ব্যবহার করে একটিOptionalঅবজেক্ট তৈরি করা হয়েছে।filter()মেথডের মাধ্যমে Regex ব্যবহার করে ইমেইল ভ্যালিডেশন করা হয়েছে।- যদি
emailপ্যাটার্নের সাথে মিলে যায়, তবেisPresent()trueফেরত দেবে, এবং ইমেইলটি বৈধ বলে চিহ্নিত হবে।
4. Default Methods and Regex Reusability
Java 8 এ default methods ব্যবহার করে আপনি ইন্টারফেসে মেথডের ডিফল্ট বাস্তবায়ন প্রদান করতে পারেন। আপনি Regex সম্পর্কিত কাজগুলো ইন্টারফেসে ডিফাইন করে default methods ব্যবহার করে কোড পুনরায় ব্যবহারযোগ্য করতে পারেন।
Default Method Example:
import java.util.regex.*;
interface RegexProcessor {
// Default method for regex matching
default boolean matches(String text, String pattern) {
return text.matches(pattern);
}
}
public class RegexWithDefaultMethod implements RegexProcessor {
public static void main(String[] args) {
RegexWithDefaultMethod processor = new RegexWithDefaultMethod();
String text = "hello123";
String pattern = "\\w+\\d+";
// Using default method to check pattern matching
if (processor.matches(text, pattern)) {
System.out.println("Pattern matched!");
} else {
System.out.println("Pattern not matched.");
}
}
}
আউটপুট:
Pattern matched!
ব্যাখ্যা:
- default method
matches()ইন্টারফেসে ডিফাইন করা হয়েছে এবং এটি একটি প্যাটার্নের সাথে স্ট্রিং ম্যাচ করে। - ক্লাস
RegexWithDefaultMethodএ আমরা এই ডিফল্ট মেথডটি ব্যবহার করেছি।
5. Method References and Regex Integration
Java 8 এ Method References ব্যবহার করে আপনি মেথড কলকে আরও সংক্ষিপ্ত এবং পাঠযোগ্য করতে পারেন। Regex এর ক্ষেত্রে, আপনি method references ব্যবহার করে কিছু প্যাটার্ন মেলানোর কাজ আরও সহজভাবে করতে পারেন।
Method Reference Example:
import java.util.*;
import java.util.regex.*;
public class MethodReferenceExample {
public static void main(String[] args) {
List<String> strings = Arrays.asList("apple", "banana", "123", "cherry", "abc123");
// Regex pattern to match words containing digits
String pattern = ".*\\d+.*";
// Using method reference to filter and match regex
strings.stream()
.filter(MethodReferenceExample::isMatching) // Method reference
.forEach(System.out::println);
}
// Method to check if the string matches the pattern
public static boolean isMatching(String str) {
return str.matches(".*\\d+.*");
}
}
আউটপুট:
123
abc123
ব্যাখ্যা:
MethodReferenceExample::isMatchingএই মেথড রেফারেন্সটিfilter()মেথডে ব্যবহার করা হয়েছে, যা Regex matching করতে সাহায্য করে।
Java 8 এর advanced features যেমন lambda expressions, streams, default methods, Optional, এবং method references Regex এর সাথে ইন্টিগ্রেট করে কোডকে আরও কার্যকরী, সংক্ষিপ্ত এবং পরিষ্কার করে তোলে। এসব ফিচার Regex-এর কার্যকারিতা এবং কোড পুনরায় ব্যবহারের জন্য গুরুত্বপূর্ণ এবং বড় ডেটাসেট বা জটিল টেক্সট ম্যানিপুলেশনে performance উন্নত করতে সাহায্য করে।
- Streams API এবং Lambda Expressions ব্যবহার করে আপনি Regex-কে আরও দক্ষতার সাথে একত্রিত করতে পারেন।
- Default Methods এবং Method References Regex-এর কার্যকারিতা উন্নত করার জন্য ব্যবহৃত হতে পারে।
- Optional ব্যবহার করে নিরাপদভাবে ইনপুট ভ্যালিডেশন করা সম্ভব।
Read more