1. ডেটা রূপান্তর

ক্লাসের Stream<T>একটি পদ্ধতিও রয়েছে যা আপনাকে এক প্রকার থেকে অন্য টাইপের ডেটা রূপান্তর করতে দেয়। এই পদ্ধতি হল map()

এটি একটি স্ট্রীমও প্রদান করে, কিন্তু একটি ভিন্ন ধরনের উপাদানের সাথে। পদ্ধতিটি map()একটি পদ্ধতি যুক্তি হিসাবে একটি ফাংশন নেয় যা একটি ডেটা টাইপকে অন্যটিতে রূপান্তর করে।

উদাহরণ:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map((x) -> String.valueOf(x));
Integerএকটি স্ট্রীম একটি Stringস্রোতে রূপান্তর

পদ্ধতিতে পাস করা ফাংশন আর্গুমেন্ট map()একটি সংখ্যা নেয় xএবং তার স্ট্রিং উপস্থাপনা প্রদান করে। যাইহোক, আপনি এই কোডটি আরও কম্প্যাক্টলি লিখতে পারেন:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Integerএকটি স্ট্রীম একটি Stringস্রোতে রূপান্তর

একটি সংখ্যা একটি স্ট্রিং রূপান্তর

একইভাবে, আপনি একটি স্ট্রিংকে একটি সংখ্যায় রূপান্তর করতে কোড লিখতে পারেন - এটিও জটিল নয়:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Stream<Integer> stream3 = stream2.map(Integer::parseInt);
Stringএকটি প্রবাহকে একটি Integerস্রোতে রূপান্তর করা হচ্ছে

একটি স্ট্রিং রূপান্তর aURI

ডেটা রূপান্তর ক্রিয়াকলাপ হতে পারে সম্পদ- এবং সময় নিবিড়। ধরা যাক আমরা স্ট্রিংগুলির একটি সংগ্রহকে URI অবজেক্টে রূপান্তর করতে চাই। এটি করা খুব সহজ, কারণ ইউআরআই কনস্ট্রাক্টর একটি স্ট্রিং একটি যুক্তি হিসাবে নেয়।

ArrayList<String> list = new ArrayList<String>();
list.add("https://google.com");
list.add("https://linkedin.com");
list.add("https://yandex.com");

Stream<URI> stream = list.stream().map( URI::new );
Stringএকটি প্রবাহকে একটি URIস্রোতে রূপান্তর করা হচ্ছে

আমরা একটি সংগ্রহ তৈরি করেছি এবং এটিকে 3টি ওয়েব ঠিকানা দিয়ে তৈরি করেছি। তারপর আমরা Stream<String>সংগ্রহ থেকে একটি বস্তু পেয়েছি, এবং সেই স্ট্রিম থেকে আমরা একটি Stream<URI>বস্তু পেয়েছি। আমরা মানচিত্র পদ্ধতিটি সেই পদ্ধতির একটি রেফারেন্স পাস করেছি যা প্রতিটি স্ট্রিংকে একটি URI তে রূপান্তর করতে ব্যবহৃত হবে।

এই পদ্ধতি (কন্সট্রাকটর) Stringএকটি যুক্তি হিসাবে গ্রহণ করা আবশ্যক. সবকিছু নিখুঁত বলে মনে হচ্ছে ...


2. ব্যতিক্রম

আমরা আশা করতে পারি যে উপরের কোডটি কাজ করবে, কিন্তু এটি হবে না - প্রোগ্রামটি কম্পাইল করবে না। এবং এই কারণে নয় যে আমরা কোথাও ভুল করেছি, কিন্তু জাভা এর নির্মাতারা গোলমাল করেছে বলে।

একসময়, তাদের ক্লাস কনস্ট্রাক্টরের URISyntaxExceptionসাথে চেক করা ব্যতিক্রম ( ) যোগ করার উজ্জ্বল ধারণা ছিল URI! এবং এই জাতীয় ব্যতিক্রমগুলি অবশ্যই একটিতে আবৃত করা উচিত try-catch

সুতরাং আমাদের কোডের শেষ লাইনটি এইরকম দেখাবে:

Stream<URI> stream = list.stream().map(str ->
{
  try
  {
     return new URI(str);
  }
  catch (URISyntaxException e)
  {
     e.printStackTrace();
     return null;
  }
});

আমরা কি বলতে পারি? চেক করা ব্যতিক্রম ব্যবহার করার আগে আপনার দুবার চিন্তা করা উচিত । এবং একটি কনস্ট্রাক্টরে ব্যবহার করার আগে তিনবার চিন্তা করুন।