Free tutorials & notes in Hindi & English · Clean code examples 🧰 मुफ़्त PDF और फ़ोटो टूल्स →
📘 Lesson  ·  Lesson 45

Stream API

Stream API क्या है

Stream API (Java 8) आपको collection को साफ़, पढ़ने योग्य तरीके से process करने देता है — filtering, transforming और collecting — मैन्युअल loops लिखे बिना। आप operations की एक pipeline बनाते हैं जो लगभग सादे अंग्रेज़ी जैसी पढ़ी जाती है।

💡 Stream pipeline = source → intermediate steps (filter, map) → terminal step (collect, forEach)।

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));
1
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);
2
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);
1
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);
[2, 4]

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);
[KABIR]

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 हर एक बदलता है।
  • collect results को वापस list में इकट्ठा करता है (terminal)।
  • Intermediate steps lazy हैं; terminal step pipeline चलाता है।

आगे, streams द्वारा इस्तेमाल lambdas लिखिए lambda expressions में, या results store कीजिए collection में।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

Java में Stream API क्या है?
Stream API, Java 8 में जोड़ा, आपको collections को साफ़, functional शैली में process करने देता है — loops लिखे बिना filtering, transforming और collecting। आप operations को एक pipeline में जोड़ते हैं जो आप क्या चाहते हैं उसके वर्णन जैसा पढ़ा जाता है।
filter और map में क्या अंतर है?
filter सिर्फ़ test पास करने वाले items रखता है, तो यह कम items लौटा सकता है। map हर item को कुछ नया में बदलता है, वही गिनती रखकर। आप अक्सर इन्हें साथ इस्तेमाल करते हैं।
Stream में collect क्या करता है?
collect terminal operation है जो stream results को वापस collection में इकट्ठा करता है, जैसे List, Collectors.toList() इस्तेमाल करके। यह pipeline ख़त्म करता है और आपको इस्तेमाल योग्य result देता है।
Intermediate और terminal operations में क्या अंतर है?
Intermediate operations (filter, map) नया stream लौटाती हैं और lazy हैं — जब तक terminal operation न चले वे कुछ नहीं करतीं। Terminal operations (collect, forEach, count) result बनाती हैं और पूरी pipeline trigger करती हैं।
क्या streams loops की जगह हैं?
Data filter और transform करने को streams अक्सर loops से साफ़ हैं, पर हमेशा नहीं। सरल iteration या side effects को loop साफ़ हो सकता है। Streams वहाँ इस्तेमाल कीजिए जहाँ वे intent को ज़्यादा पढ़ने योग्य बनाएँ।
← Back to Java Tutorial
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.
अगला topicGarbage Collection आपकी प्रगति: 45 / 61 (74%) · Lesson 46 / 61 आगे बढ़ें →

यह lesson कैसा लगा?

आपकी राय से हम content और बेहतर बनाते हैं।

अपना review और सुझाव लिखें (वैकल्पिक)

Review approve होने के बाद आपका नाम और शहर इसके साथ public दिख सकते हैं। Email या phone न लिखें।

▶ CodingEasily on YouTube

Video से सीखें – आसान Hindi में

चुनी हुई video: RDBMS भाग 3 – Class XI Commerce IT

▶ Channel subscribe करें