Stream API
Stream API क्या है
Stream API (Java 8) आपको collection को साफ़, पढ़ने योग्य तरीके से process करने देता है — filtering, transforming और collecting — मैन्युअल loops लिखे बिना। आप operations की एक pipeline बनाते हैं जो लगभग सादे अंग्रेज़ी जैसी पढ़ी जाती है।
Stream बनाना
import java.util.*;
import java.util.stream.*;
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
nums.stream() // stream बनाओ
.forEach(n -> System.out.println(n));
2
3
4
5
Stream शुरू करने को collection पर .stream() call कीजिए। यहाँ forEach terminal operation है जो हर item पर action चलाता है।
filter — कुछ रखो
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5, 6);
nums.stream()
.filter(n -> n % 2 == 0) // even numbers रखो
.forEach(System.out::println);
4
6
filter सिर्फ़ वे items रखता है जहाँ test true हो। यह intermediate operation है, तो यह नया stream लौटाता है जिसे आप आगे chain कर सकते हैं।
map — बदलो
List<Integer> nums = Arrays.asList(1, 2, 3);
nums.stream()
.map(n -> n * n) // हर एक square करो
.forEach(System.out::println);
4
9
map हर item को दिए function से बदलता है — यहाँ हर number square करके। गिनती वही रहती है; सिर्फ़ values बदलती हैं।
collect — वापस list में
List<Integer> nums = Arrays.asList(1, 2, 3, 4);
List<Integer> evens = nums.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println(evens);
collect(Collectors.toList()) terminal operation है जो results को नई List में इकट्ठा करता है, ताकि आप उन्हें store या return कर सकें।
एक पूरी pipeline
List<String> names = Arrays.asList("aman", "diya", "kabir");
List<String> result = names.stream()
.filter(n -> n.length() > 4) // लंबे names रखो
.map(String::toUpperCase) // uppercase बनाओ
.collect(Collectors.toList()); // वापस list में
System.out.println(result);
Pipeline steps जोड़ती है: filter, फिर map, फिर collect। यह ऊपर-से-नीचे "लंबे names रखो, uppercase करो, इकट्ठा करो" जैसी पढ़ी जाती है — nested loops से कहीं साफ़।
आम गलतियाँ
- Terminal operation भूलना। collect/forEach बिना, कुछ नहीं चलता (streams lazy हैं)।
- Stream दोबारा इस्तेमाल करना। Stream एक बार इस्तेमाल हो सकता है; दोबारा चलाने को नया बनाइए।
- filter और map में confusion। filter चुनता है; map बदलता है।
- Streams का ज़्यादा इस्तेमाल। सरल loops या side effects को साधारण loop बेहतर पढ़ा जा सकता है।
सारांश
- Stream API collections को मैन्युअल loops बिना process करता है।
.stream()से शुरू कीजिए, फिर operations chain कीजिए।filterकुछ items रखता है;mapहर एक बदलता है।collectresults को वापस list में इकट्ठा करता है (terminal)।- Intermediate steps lazy हैं; terminal step pipeline चलाता है।
आगे, streams द्वारा इस्तेमाल lambdas लिखिए lambda expressions में, या results store कीजिए collection में।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
Java में Stream API क्या है?
filter और map में क्या अंतर है?
filter सिर्फ़ test पास करने वाले items रखता है, तो यह कम items लौटा सकता है। map हर item को कुछ नया में बदलता है, वही गिनती रखकर। आप अक्सर इन्हें साथ इस्तेमाल करते हैं।Stream में collect क्या करता है?
collect terminal operation है जो stream results को वापस collection में इकट्ठा करता है, जैसे List, Collectors.toList() इस्तेमाल करके। यह pipeline ख़त्म करता है और आपको इस्तेमाल योग्य result देता है।