Stream কী?
Stream হলো ডাটার একটি প্রবাহ (sequence), যার উপর আমরা filter, map, sort, count ইত্যাদি অপারেশন করতে পারি।
- Stream নিজে ডাটা সংরক্ষণ করে না
- এটি Collection / Array / Function থেকে তৈরি হয়
- Stream একবার ব্যবহার করলে reuse করা যায় না
Collection থেকে Stream তৈরি করা
সবচেয়ে বেশি ব্যবহৃত পদ্ধতি।
List থেকে Stream
List<String> names = List.of("Rahim", "Karim", "Amin");
Stream<String> stream = names.stream();
ব্যবহার উদাহরণ
names.stream()
.filter(name -> name.startsWith("A"))
.forEach(System.out::println);
Array থেকে Stream তৈরি করা
String Array
String[] fruits = {"Apple", "Banana", "Mango"};
Stream<String> stream = Arrays.stream(fruits);
int Array
int[] numbers = {1, 2, 3, 4};
IntStream intStream = Arrays.stream(numbers);
ব্যবহার উদাহরণ
Arrays.stream(numbers)
.filter(n -> n % 2 == 0)
.forEach(System.out::println);
Stream.of() ব্যবহার করে Stream তৈরি করা
ছোট ডাটা বা quick test এর জন্য ভালো।
Stream<String> stream = Stream.of("Java", "Spring", "Docker");
উদাহরণ
Stream.of(10, 20, 30)
.map(n -> n * 2)
.forEach(System.out::println);
Empty Stream তৈরি করা
কখনো কখনো দরকার হয়।
Stream<String> emptyStream = Stream.empty();
generate() দিয়ে Infinite Stream তৈরি করা
যখন প্রতিবার নতুন ভ্যালু তৈরি করতে হবে।
Stream<Double> randomNumbers = Stream.generate(Math::random);
Infinite stream, তাই limit দিতে হবে।
Stream.generate(Math::random)
.limit(5)
.forEach(System.out::println);
iterate() দিয়ে Stream তৈরি করা
ধাপে ধাপে ভ্যালু বাড়ানোর জন্য।
Stream<Integer> stream = Stream.iterate(1, n -> n + 1);
উদাহরণ
Stream.iterate(1, n -> n + 2)
.limit(5)
.forEach(System.out::println);
// Output: 1 3 5 7 9
Primitive Streams (int, long, double)
পারফরম্যান্স ভালো হয়।
IntStream
IntStream.range(1, 6)
.forEach(System.out::println);
// Output: 1 2 3 4 5
LongStream / DoubleStream
DoubleStream.of(1.5, 2.5, 3.5)
.forEach(System.out::println);
File থেকে Stream তৈরি করা (বাস্তব উদাহরণ)
Files.lines(Path.of("data.txt"))
.filter(line -> !line.isEmpty())
.forEach(System.out::println);
Parallel Stream তৈরি করা
একাধিক CPU core ব্যবহার করতে।
List<Integer> list = List.of(1,2,3,4,5);
list.parallelStream()
.map(n -> n * n)
.forEach(System.out::println);
Stream তৈরির সব পদ্ধতির সারাংশ
| উৎস | পদ্ধতি |
|---|---|
| Collection | collection.stream() |
| Array | Arrays.stream() |
| Static | Stream.of() |
| Empty | Stream.empty() |
| Infinite | Stream.generate() |
| Sequence | Stream.iterate() |
| Primitive | IntStream.range() |
| File | Files.lines() |
| Parallel | parallelStream() |
গুরুত্বপূর্ণ কথা
- Stream একবারই ব্যবহার করা যায়
- Stream lazy, terminal operation না হলে কাজ হয় না
- Stream loop নয়, declarative স্টাইল