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:
Intermediate Operations
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
Stream lazy hota hai.
Intermediate operation tab tak execute nahi hota jab tak terminal operation call na ho.
Stream ek baar consume hone ke baad reuse nahi ho sakta.
Parallel stream performance improve karta hai but hamesha better nahi hota.
Stream original collection ko modify nahi karta.