Streams API এবং Regex এর সাথে ব্যবহার

Java Regex এবং Functional Programming (Java 8+) - জাভা রেজেক্স (Java Regex) - Java Technologies

332

Java 8-এ Streams API এবং Regular Expressions (Regex) ব্যবহারের মাধ্যমে আপনি ডেটা প্রসেসিং এবং প্যাটার্ন ম্যাচিংকে আরও শক্তিশালী, সহজ এবং কার্যকরীভাবে একত্রিত করতে পারেন। Streams API এর মাধ্যমে আপনি ডেটাকে ফিল্টার, ম্যানিপুলেট এবং ট্রান্সফর্ম করতে পারেন, এবং Regex ব্যবহার করে আপনি ডেটার মধ্যে নির্দিষ্ট প্যাটার্ন বা শর্ত মিলিয়ে কাজ করতে পারেন।

এই দুটি টুল একসাথে ব্যবহারের মাধ্যমে আপনি জটিল ডেটা প্রসেসিং টাস্কগুলো আরও সহজে সম্পন্ন করতে পারবেন। আসুন দেখি কীভাবে Streams API এবং Regex একসাথে ব্যবহার করা যায়।

Streams API এবং Regex ব্যবহার করার উদাহরণ:

ধরা যাক, আমাদের একটি লিস্ট আছে যেটিতে স্ট্রিং রয়েছে, এবং আমরা সেই স্ট্রিংগুলো ফিল্টার করতে চাই যেগুলোর মধ্যে একটি নির্দিষ্ট প্যাটার্ন (যেমন, একটি ইমেইল ঠিকানা বা ফোন নম্বর) রয়েছে।

উদাহরণ: একটি লিস্ট থেকে ইমেইল অ্যাড্রেস এবং ফোন নম্বর ফিল্টার করা

ধরা যাক, আমাদের একটি লিস্ট আছে যার মধ্যে বিভিন্ন স্ট্রিং রয়েছে, এবং আমরা Regex ব্যবহার করে ইমেইল অ্যাড্রেস এবং ফোন নম্বর খুঁজে বের করব।

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

public class StreamsAndRegexExample {
    public static void main(String[] args) {
        // Sample list of strings
        List<String> data = Arrays.asList(
            "john.doe@example.com",
            "My phone number is +1-800-555-1234",
            "hello world",
            "Contact us at support@company.com",
            "12345"
        );

        // Regex for matching email addresses
        String emailRegex = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
        Pattern emailPattern = Pattern.compile(emailRegex);

        // Regex for matching phone numbers
        String phoneRegex = "\\+\\d{1,3}-\\d{1,4}-\\d{1,4}-\\d{1,4}";
        Pattern phonePattern = Pattern.compile(phoneRegex);

        // Using Streams API to filter and match patterns
        List<String> emails = data.stream()
            .filter(s -> emailPattern.matcher(s).matches())  // Match emails
            .collect(Collectors.toList());

        List<String> phoneNumbers = data.stream()
            .filter(s -> phonePattern.matcher(s).matches())  // Match phone numbers
            .collect(Collectors.toList());

        // Print the results
        System.out.println("Emails found:");
        emails.forEach(System.out::println);

        System.out.println("\nPhone Numbers found:");
        phoneNumbers.forEach(System.out::println);
    }
}

ব্যাখ্যা:

  1. Streams API:
    • data.stream(): data লিস্ট থেকে একটি স্ট্রিম তৈরি করা হয়েছে।
    • .filter(): প্রতিটি স্ট্রিং ফিল্টার করা হচ্ছে একটি শর্তের ভিত্তিতে।
      • এখানে আমরা Regex প্যাটার্ন ব্যবহার করছি ইমেইল বা ফোন নম্বর খুঁজে বের করার জন্য।
    • .collect(Collectors.toList()): ফিল্টার হওয়া স্ট্রিংগুলিকে একটি নতুন লিস্টে সংগ্রহ করা হচ্ছে।
  2. Regex Matching:
    • emailPattern.matcher(s).matches(): এটি চেক করে যে স্ট্রিংটি ইমেইল প্যাটার্নের সাথে মেলে কি না।
    • phonePattern.matcher(s).matches(): এটি চেক করে যে স্ট্রিংটি ফোন নম্বর প্যাটার্নের সাথে মেলে কি না।

আউটপুট:

Emails found:
john.doe@example.com
Contact us at support@company.com

Phone Numbers found:
+1-800-555-1234

Streams API এবং Regex এর সুবিধা:

  • Streams API এবং Regex একসাথে ব্যবহার করে আপনি ফিল্টারিং, ট্রান্সফর্মেশন এবং ম্যাচিং অপারেশনগুলোকে কার্যকরভাবে একত্রিত করতে পারেন।
  • Declarative Syntax: Streams API ব্যবহারের মাধ্যমে কোডটি আরও পরিষ্কার এবং ছোট হয়, যা সহজেই বুঝতে এবং রক্ষণাবেক্ষণ করতে সাহায্য করে।
  • Parallelism: Streams API ব্যবহার করলে আপনি অনেক বড় ডেটাসেটের জন্য সহজে parallel processing করতে পারেন।
  • Streams API এবং Regex এর সংমিশ্রণ খুবই শক্তিশালী টুল, যা ডেটা ফিল্টারিং, ভ্যালিডেশন এবং ট্রান্সফর্মেশনকে সহজ করে তোলে।
  • আপনি যখন বড় ডেটাসেটের মধ্যে নির্দিষ্ট প্যাটার্ন খুঁজে বের করতে চান, তখন Streams API এবং Regex একসাথে ব্যবহার করলে আপনার কাজ অনেক সহজ হয়ে যায়।
  • এই পদ্ধতি জাভাতে functional programming ধারণা এবং declarative syntax ব্যবহার করার একটি চমৎকার উদাহরণ।
Content added By
Promotion

Are you sure to start over?

Loading...