Java Academy · पाठ

सामान्य कठिनाइयाँ

Streams के साथ होने वाली सामान्य गलतियों से बचिए: streams का दोबारा उपयोग, छिपे side effects और parallel + mutable state

पाठ 3, कुल 3 में से8 चरण

सामान्य कठिनाइयाँ, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 3 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 3 पाठ शामिल हैं।

परिचय

स्ट्रीम शक्तिशाली होती हैं, लेकिन इनमें कुछ दोष भी हैं: किसी Stream का दोबारा उपयोग करना, छिपे हुए दुष्प्रभाव और समानांतर प्रसंस्करण को परिवर्तनीय स्थिति के साथ मिलाना।

एक-बार उपयोग वाली स्ट्रीम

Stream एक-बार उपयोग वाली होती है: किसी अंतिम संचालन (forEach, collect, reduce) के बाद इसका फिर से उपयोग नहीं किया जा सकता।

कोड: पुनः उपयोग त्रुटि

अंतिम संचालन के बाद Stream का उपयोग हो चुका होता है; उसे फिर से उपयोग करने का प्रयास IllegalStateException उत्पन्न करता है।

import java.util.*;import java.util.stream.*;public class Main {
  public static void main(String[] args) {
    List<Integer> nums = Arrays.asList(1, 2, 3);
    Stream<Integer> s = nums.stream();
    s.forEach(System.out::println); // terminal
    try {
      s.forEach(System.out::println); // reuse -> IllegalStateException
    } catch (IllegalStateException e) {
      System.out.println("Oops: " + e.getMessage());
    }
  }
}

दुष्प्रभाव

map/filter के अंदर दुष्प्रभावों से बचें, जैसे बाहरी सूचियों को बदलना। शुद्ध फ़ंक्शन को प्राथमिकता दें और अंत में collect() करें।

कोड: दुष्प्रभाव बनाम collect

प्रवाह-श्रृंखला में स्थिति को बदलना अस्थिर होता है। collect() वाला संस्करण अधिक स्पष्ट और सुरक्षित है।

import java.util.*;import java.util.stream.*;public class Main {
  public static void main(String[] args) {
    List<Integer> nums = Arrays.asList(1,2,3);
    // Pitfall: mutating external list from map/forEach
    List<Integer> out = new ArrayList<>();
    nums.stream().map(n -> { out.add(n*n); return n*n; }).forEach(x -> {});
    System.out.println("With side effects: " + out);

    // Better: use collect to build the result
    List<Integer> squares = nums.stream().map(n -> n*n).collect(Collectors.toList());
    System.out.println("With collect: " + squares);
  }
}

कोड: समानांतर + परिवर्तनीय स्थिति

समानांतर स्ट्रीम और परिवर्तनीय पात्र दौड़ की स्थितियाँ उत्पन्न कर सकते हैं। ऐसे collect() को प्राथमिकता दें जो समवर्ती प्रसंस्करण सँभालता है।

import java.util.*;public class Main {
  public static void main(String[] args) {
    List<Integer> nums = java.util.Arrays.asList(1,2,3,4,5);
    // Pitfall: adding to a normal ArrayList from parallel pipeline (unsafe)
    List<Integer> unsafe = new ArrayList<>();
    nums.parallelStream().forEach(n -> unsafe.add(n)); // may be unsafe
    System.out.println("Parallel add to ArrayList (unsafe demo): " + unsafe);

    // Safer: use built-in collectors
    List<Integer> safe = nums.parallelStream().map(n -> n).collect(java.util.stream.Collectors.toList());
    System.out.println("Collected safely: " + safe);
  }
}

दोष जाँच

त्वरित जाँच: शुरुआती सीखने वालों के लिए सामान्य Stream दोष इनमें से कौन-सा है?

पुनरावलोकन

पुनरावलोकन: 1) स्ट्रीम एक-बार उपयोग वाली होती हैं। 2) प्रवाह-श्रृंखलाओं में दुष्प्रभावों से बचें। 3) समानांतर स्ट्रीम को असुरक्षित परिवर्तनीय स्थिति के साथ न मिलाएँ।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Java सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
104
पाठ
374

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

क्या “सामान्य कठिनाइयाँ” पाठ निःशुल्क है?

हाँ—“सामान्य कठिनाइयाँ” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 3 पाठ शामिल हैं।

“सामान्य कठिनाइयाँ” में मैं क्या सीखूँगा?

Streams के साथ होने वाली सामान्य गलतियों से बचिए: streams का दोबारा उपयोग, छिपे side effects और parallel + mutable state आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 3 में से 3वाँ पाठ है।

“सामान्य कठिनाइयाँ” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. क्रम और Short-circuiting
  2. Parallel Streams की बुनियादी बातें
  3. सामान्य कठिनाइयाँ
← Java Academy पर वापस जाएँ