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 তৈরির সব পদ্ধতির সারাংশ

উৎসপদ্ধতি
Collectioncollection.stream()
ArrayArrays.stream()
StaticStream.of()
EmptyStream.empty()
InfiniteStream.generate()
SequenceStream.iterate()
PrimitiveIntStream.range()
FileFiles.lines()
ParallelparallelStream()


গুরুত্বপূর্ণ কথা

  • Stream একবারই ব্যবহার করা যায়
  • Stream lazy, terminal operation না হলে কাজ হয় না
  • Stream loop নয়, declarative স্টাইল