Java Stream.collect कोटलिन में: पूर्ण गाइड उदाहरणों के साथ

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Kotlin में Stream.collect लिखना कैसे बंद करें और जीना शुरू करें

\n\n

क्या आपने कभी Java से Kotlin पर स्विच किया है और ऐसा महसूस किया है जैसे मछली को पानी से बाहर फेंक दिया गया हो? खासकर जब बात स्ट्रीम की आती है। Java 8 में हम .stream().filter().map().collect() की चेन के आदी थे। और Kotlin में — बम! — और परिचित रूप में कोई Stream.collect नहीं है। लेकिन घबराएं नहीं। वास्तव में, Kotlin की मानक लाइब्रेरी में वह सब कुछ है, केवल अधिक सुविधाजनक, संक्षिप्त और बिना किसी अनावश्यक शोर के।

\n\n

इस लेख में, हम देखेंगे कि Kotlin में Java 8 Stream.collect के कौन से समकक्ष मौजूद हैं, और इसे वास्तविक उदाहरणों के साथ दिखाएंगे। यदि आप प्रश्न का उत्तर ढूंढ रहे हैं "मानक Kotlin लाइब्रेरी में Java 8 Stream.collect के कौन से समकक्ष उपलब्ध हैं?" — तो आप सही जगह पर हैं। हम सबसे लोकप्रिय ऑपरेशनों को कवर करेंगे: सरल सूची संग्रह से लेकर जटिल समूहीकरण और स्ट्रिंग संयोजन तक।

\n\n

तैयार हैं? चलिए शुरू करते हैं!

\n\n

1. सबसे सरल मामला: toList() और toSet()

\n\n

Java में, स्ट्रीम के परिणाम को सूची में एकत्र करने के लिए, आप लिखते हैं:

\n\n
List<String> result = list.stream()\n    .filter(s -> s.length() > 3)\n    .collect(Collectors.toList());
\n\n

Kotlin में यह collect के बिना एक पंक्ति में बदल जाता है:

\n\n
val result = list.filter { it.length > 3 }
\n\n

हाँ, आपने सही सुना। Kotlin में filter पहले से ही एक सूची लौटाता है। लेकिन यदि आपको संग्रह के प्रकार को स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता है, तो toList(), toSet() या toMutableList() का उपयोग करें:

\n\n
val numbers = listOf(1, 2, 3, 4, 5, 5)\nval uniqueNumbers: Set<Int> = numbers.toSet()\n// परिणाम: [1, 2, 3, 4, 5]
\n\n

निष्कर्ष: Kotlin में अधिकांश संग्रह ऑपरेशन (filter, map, flatMap) तुरंत एक सूची लौटाते हैं। collect(Collectors.toList()) की अब आवश्यकता नहीं है।

\n\n

2. समूहीकरण: Collectors.groupingBy के बजाय groupingBy

\n\n

समूहीकरण सबसे सामान्य कार्यों में से एक है। Java में यह इस तरह दिखता है:

\n\n
Map<Integer, List<String>> byLength = list.stream()\n    .collect(Collectors.groupingBy(String::length));
\n\n

Kotlin में इसके लिए एक सुंदर फंक्शन groupBy है:

\n\n
val words = listOf("किट्टी", "कोड", "केतली", "बिल्ली")\nval byLength = words.groupBy { it.length }\n// परिणाम: {4=[किट्टी, कोड], 5=[केतली], 4=[बिल्ली]}
\n\n

लेकिन एक बारीकी है: groupBy सीधे Map<K, List<V>> लौटाता है। और यदि आपको कुछ अधिक जटिल चाहिए, जैसे प्रत्येक समूह में तत्वों की गिनती करना? Java में आप Collectors.counting() का उपयोग करेंगे:

\n\n
Map<Integer, Long> countByLength = list.stream()\n    .collect(Collectors.groupingBy(String::length, Collectors.counting()));
\n\n

Kotlin में इसके लिए groupingBy + eachCount है:

\n\n
val countByLength = words.groupingBy { it.length }.eachCount()\n// परिणाम: {4=2, 5=1}
\n\n

और यदि आपको सूची नहीं, बल्कि एक सेट एकत्र करना है? ट्रांसफॉर्मेशन के साथ groupBy का उपयोग करें:

\n\n
val byLengthSet = words.groupBy(keySelector = { it.length }, valueTransform = { it.uppercase() })\n// परिणाम: {4=[किट्टी, कोड], 5=[केतली]}
\n\n

सुझाव: यदि आपको groupBy और groupingBy के बीच कुछ चाहिए, तो groupingBy का उपयोग करें — यह आलसी है और विभिन्न एग्रीगेशन (eachCount, fold, reduce) लागू करने की अनुमति देता है।

\n\n

3. स्ट्रिंग संयोजन: Collectors.joining() के बजाय joinToString()

\n\n

Java में विभाजक के माध्यम से स्ट्रिंग संयोजन:

\n\n
String joined = list.stream()\n    .collect(Collectors.joining(", "));
\n\n

Kotlin में यह और भी सरल है:

\n\n
val words = listOf("Kotlin", "Java", "Python")\nval joined = words.joinToString(",                

ब्लॉग

पुस्तक अनुशंसाएँ