Loading content...
Loading content...
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 create karne ke 2 main tareeke hain.
java
Stream<Integer> stream1 = Stream.of(1, 2, 3, 4, 5);java
ArrayList<String> names = new ArrayList<>();
names.add("John");
names.add("Robert");
names.add("Orlen");
Stream<String> stream2 = names.stream();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 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 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 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.
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);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 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 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));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.
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.
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 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.
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.