# Stream API — एडवांस्ड जावा

Source: https://www.geekswithgeeks.com/hi/advanced-java/adv-streams

> filter, map व reduce से कलेक्शन पर घोषणात्मक पाइपलाइन बनाएँ, groupingBy जैसे Collectors से परिणाम एकत्र करें, और जानें parallelStream कब मदद करता है।

## स्रोत, मध्यवर्ती, टर्मिनल

पाइपलाइन में **स्रोत**, शून्य या अधिक **लेज़ी मध्यवर्ती** ऑपरेशन, और एक **टर्मिनल** ऑपरेशन होता है जो निष्पादन शुरू करता है।

## एक वास्तविक पाइपलाइन

Collectors परिणाम बनाते हैं: `toList`, `groupingBy`, `joining`, `summingInt` आदि।

```java
Map<Dept, List<String>> byDept = employees.stream()
    .filter(e -> e.salary() > 50_000)
    .sorted(Comparator.comparing(Employee::name))
    .collect(Collectors.groupingBy(
        Employee::dept,
        Collectors.mapping(Employee::name, Collectors.toList())));
```

## parallelStream() सावधानी से

`parallelStream()` बड़े, CPU-बाउंड, साइड-इफ़ेक्ट-मुक्त काम पर ही मदद करता है; छोटे डेटा पर धीमा।
