JShell হলো একটি টুল যা জাভা ৯-এ পরিচয় করানো হয়েছে, এবং এটি এক্সপ্রেশন, ভেরিয়েবল, মেথড, ক্লাস ইত্যাদি সিম্পল স্টেটমেন্ট ইনপুট হিসেবে গ্রহণ করে এবং অবিলম্বে ফলাফল প্রদান করে।
একটি স্ট্রিম হলো ভ্যালুর একটি সিকোয়েন্স। একটি ইন্টারমিডিয়েট স্ট্রিম অপারেশন হলো একটি অপারেশন যা একটি স্ট্রিম নেয়। উদাহরণস্বরূপ, এটি একটি ল্যাম্বডা এক্সপ্রেশনে অ্যাপ্লাই করা যেতে পারে এবং এর ফলাফল হিসেবে এলিমেন্টের একটি অন্য স্ট্রিম উৎপন্ন করে।
সবচেয়ে জনপ্রিয় ইন্টারমিডিয়েট স্ট্রিম অপারেশনগুলো নিচে দেওয়া হলো:
- ১) sorted(): এই মেথড কনসিউমড স্ট্রিমের এলিমেন্টগুলো রেজাল্ট হিসেবে সংরক্ষণ করে কিন্তু এছাড়া সেগুলো ন্যাচারাল সর্টেড অর্ডারে রাখে।
- ২) distinct(): এই মেথড ইনপুট স্ট্রিমের শুধুই ইউনিক এলিমেন্ট রিটেইন করে একটি স্ট্রিম রিটার্ন করে, এবং রিটেইন করা এলিমেন্টের রিলেটিভ অর্ডার মেইনটেইন করতে পারে।
- ৩) filter(): এই মেথড কিছু লজিক বেসড স্ট্রিম এলিমেন্ট ফিল্টার করতে ব্যবহৃত হয়।
- ৪) map(): এই মেথড ল্যাম্বডা এক্সপ্রেশন অ্যাপ্লাই করে ইনপুট স্ট্রিম এলিমেন্ট থেকে নতুন রেজাল্ট কম্পিউট করে। তারপর, এই রেজাল্টগুলোর একটি স্ট্রিম আউটপুট হিসেবে রিটার্ন করে।
নিচের কোড স্নিপেটে, আমরা JShell টুলে ভিন্ন ভিন্ন ইন্টারমিডিয়েট স্ট্রিম অপারেশন ইমপ্লিমেন্ট করতে পারি।
স্নিপেট
jshell> List<Integer> numbers = List.of(3, 10, 23, 200, 77, 9, 32); numbers ==> [3, 10, 23, 200, 77, 9, 32] jshell> numbers.stream().sorted().forEach(elem -> System.out.println(elem)); 3 9 10 23 32 77 200 jshell> List<Integer> numbers = List.of(3, 5, 54, 280, 5, 9, 40); numbers ==> [3, 5, 54, 280, 5, 9, 40] jshell> numbers.stream().distinct().forEach(elem -> System.out.println(elem)); 3 5 54 280 9 40 jshell> numbers.stream().distinct().sorted().forEach(elem -> System.out.println(elem)); 3 5 9 40 54 280 jshell> numbers.stream().distinct().map(num -> num * num).forEach(elem -> System.out.println(elem)); 9 25 2916 78400 81 1600