Last updated : July 27, 2026

Stream API In Java Tutorials

Programming

Stream API

  • Stream API Java 8 me introduce hua.

  • Stream ka use data process karne ke liye hota hai.

  • Collection data store karta hai.
    Stream data process karta hai.

  • Stream ko define kar sakte hain as:

  • Sequence of elements that comes from a source (array ya collection).

Important:

  • Stream data structure nahi hai.

  • Stream original data ko change nahi karta.

  • Stream sirf operations apply karta hai.

Stream Creation

Stream create karne ke 2 main tareeke hain.

1) Stream.of()

java

Stream<Integer> stream1 = Stream.of(1, 2, 3, 4, 5);

2) Collection ke stream() method se

java

ArrayList<String> names = new ArrayList<>();
names.add("John");
names.add("Robert");
names.add("Orlen");

Stream<String> stream2 = names.stream();

Stream Operations

Stream methods 2 type ke hote hain:

  1. Intermediate Operations

  2. Terminal Operations

Intermediate:

  • Stream return karte hain

  • Lazy hote hain

  • Example: filter(), map(), distinct(), limit(), skip(), flatMap()

Terminal:

  • Final result return karte hain

  • Stream close ho jata hai

  • Example: forEach(), count(), collect(), anyMatch()

Filtering

Filtering ka matlab hai required data nikalna.

Example:

java

List<Integer> list = Arrays.asList(66, 32, 45, 12, 20);

list.stream()
    .filter(i -> i > 20)
    .forEach(i -> System.out.println(i));

Multiple filters bhi laga sakte hain:

java

stream.filter(u -> u.age >= 18)
      .filter(u -> u.name.startsWith("A"))
      .forEach(u -> System.out.println(u));

Mapping()

Mapping ka use data transform karne ke liye hota hai.

Example:

java

List<String> names = Arrays.asList("india","usa","uk");

names.stream()
     .map(name -> name.toUpperCase())
     .forEach(System.out::println);

Length nikalna:

java

names.stream()
     .mapToInt(name -> name.length())
     .forEach(System.out::println);

Filter + Map combine:

java

names.stream()
     .filter(name -> name.startsWith("A"))
     .map(name -> name + "-" + name.length())
     .forEach(System.out::println);

flatMap()

flatMap nested stream ko flatten karta hai.

java

List<List<String>> courses = Arrays.asList(javacourses, uicourses);

courses.stream()
       .flatMap(s -> s.stream())
       .forEach(System.out::println);

Nested list → Single stream.

Slicing Operations

limit():

java

javacourses.stream()
           .limit(3)
           .forEach(System.out::println);

skip():

java

javacourses.stream()
           .skip(3)
           .forEach(System.out::println);

distinct():

java

names.stream()
     .distinct()
     .forEach(System.out::println);

Matching Operations

anyMatch():

java

boolean status = persons.stream()
                        .anyMatch(p -> p.country.equals("INDIA"));

allMatch():

java

persons.stream()
       .allMatch(p -> p.country.equals("INDIA"));

noneMatch():

java

persons.stream()
       .noneMatch(p -> p.country.equals("MEXICO"));

Ye sab boolean return karte hain.

Collectors

Collectors stream se data collect karne ke liye use hote hain.

Filter + collect:

java

List<Person> indians = persons.stream()
        .filter(p -> p.country.equals("INDIA"))
        .collect(Collectors.toList());

Sirf names collect:

java

List<String> names = persons.stream()
        .filter(p -> p.country.equals("INDIA"))
        .map(p -> p.name)
        .collect(Collectors.toList());

MAX, MIN, AVG

Max Salary:

java

Optional<Employee> max = list.stream()
        .collect(Collectors.maxBy(
                Comparator.comparing(e -> e.salary)));

System.out.println(max.get().salary);

Min Salary:

java

Optional<Employee> min = list.stream()
        .collect(Collectors.minBy(
                Comparator.comparing(e -> e.salary)));

Average Salary:

java

Double avgSalary = list.stream()
        .collect(Collectors.averagingDouble(e -> e.salary));

Group By

GroupingBy data ko key-value form me group karta hai.

java

Map<String, List<Employee>> data = list.stream()
        .collect(Collectors.groupingBy(e -> e.country));

Ye Map return karta hai.

Parallel Stream

Normal stream sequentially run hota hai.

Parallel stream multiple threads use karta hai.

java

Stream.of(1,2,3,4)
      .parallel()
      .forEach(n -> System.out.println(
              n + " :: " + Thread.currentThread()));

Performance improve karne ke liye use hota hai.

Spliterator

Spliterator Java 8 me introduce hua.

  • Collections aur Streams dono traverse kar sakta hai

  • Parallel processing support karta hai

  • Example:

java

Spliterator<String> spliterator = names.stream().spliterator();

spliterator.forEachRemaining(System.out::println);

reduce()

reduce aggregation ke liye use hota hai.

Example: Sum of array

java

int reduce = Arrays.stream(nums)
                   .reduce(0, (a,b) -> a + b);

System.out.println(reduce);

reduce teen parameters bhi le sakta hai parallel use case me.

Interview Important Points

  1. Stream lazy hota hai.

  2. Intermediate operation tab tak execute nahi hota jab tak terminal operation call na ho.

  3. Stream ek baar consume hone ke baad reuse nahi ho sakta.

  4. Parallel stream performance improve karta hai but hamesha better nahi hota.

  5. Stream original collection ko modify nahi karta.

Job PortalJobs