Collection.stream().forEach() और Collection.forEach() दोनों का उपयोग कलेक्शन पर पुनरावृत्ति (iteration) के लिए किया जाता है।
Collection.forEach() कलेक्शन के इटरेटर (iterator) का उपयोग करता है। अधिकांश कलेक्शन पुनरावृत्ति के दौरान संरचनात्मक संशोधन (structural modification) की अनुमति नहीं देते। यदि पुनरावृत्ति के दौरान कोई तत्व जोड़ा या हटाया जाता है, तो वे तुरंत ConcurrentModificationException फेंक देते हैं। यदि Collection.forEach() सिंक्रनाइज़्ड कलेक्शन पर पुनरावृत्ति कर रहा है, तो यह कलेक्शन के सेगमेंट को लॉक कर देता है और सभी कॉल्स के दौरान इसे होल्ड करके रखता है।
Collection.stream().forEach() भी कलेक्शन पर पुनरावृत्ति के लिए उपयोग किया जाता है, लेकिन यह पहले कलेक्शन को स्ट्रीम में परिवर्तित करता है और फिर कलेक्शन की स्ट्रीम पर पुनरावृत्ति करता है, इसलिए प्रसंस्करण क्रम (processing order) अपरिभाषित (undefined) होता है। यदि पुनरावृत्ति के दौरान कोई संरचनात्मक परिवर्तन होता है, तो यह भी ConcurrentModificationException फेंकता है, लेकिन अपवाद बाद में फेंका जा सकता है।
| क्र. सं. | मुख्य बिंदु | Collection.forEach() | Collection.stream().forEach() |
|---|---|---|---|
1 |
आधार |
Collection.forEach() कलेक्शन के इटरेटर का उपयोग करता है |
Collection.stream().forEach() पहले कलेक्शन को स्ट्रीम में बदलता है फिर स्ट्रीम पर पुनरावृत्ति करता है |
2 |
क्रम (Order) |
यह हमेशा Iterable के पुनरावृत्ति क्रम में निष्पादित होता है, यदि कोई निर्दिष्ट हो। |
क्रम परिभाषित नहीं है |
3 |
लॉक (Lock) |
यदि पुनरावृत्ति सिंक्रनाइज़्ड कलेक्शन पर हो रही है तो यह कलेक्शन को लॉक करता है और सभी कॉल्स के दौरान होल्ड रखता है |
यह कलेक्शन को लॉक नहीं करता |
4 |
अपवाद (Exception) |
कलेक्शन में किसी भी संरचनात्मक संशोधन के मामले में तुरंत अपवाद फेंकता है |
अपवाद बाद में फेंका जाता है |
उदाहरण: Collection.stream().forEach()
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add("Ram");
list.add("TutorialPoints");
list.stream().forEach(System.out::print);
}
}
उदाहरण: Collection.forEach()
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add("Ram");
list.add("TutorialPoints");
list.forEach(System.out::print);
}
}