दोहराए जाने वाले तत्व के साथ एक सूची बनाना


86

क्या जावा में एक उपयोगिता विधि है जो निर्दिष्ट मूल्य के बराबर सभी तत्वों के साथ एक निर्दिष्ट लंबाई की एक सूची या सरणी उत्पन्न करती है (जैसे ["फू", "फू", "फू", "फू", "फू"])?

जवाबों:


150

आप उपयोग कर सकते हैं Collections.nCopies। ध्यान दें कि यह दिए गए ऑब्जेक्ट के संदर्भ को कॉपी करता है , न कि ऑब्जेक्ट को। यदि आप स्ट्रिंग्स के साथ काम कर रहे हैं, तो इससे कोई फर्क नहीं पड़ेगा क्योंकि वे वैसे भी अपरिवर्तनीय हैं।

List<String> list = Collections.nCopies(5, "foo");
System.out.println(list);
[फू, फू, फू, फू, फू]

1
निर्दोष उत्तर!
गौरव

20

किसी सरणी के लिए आप Arrays.fill (ऑब्जेक्ट [] ए, ऑब्जेक्ट वैल) का उपयोग कर सकते हैं

String[] strArray = new String[10];
Arrays.fill(strArray, "foo");

और अगर आपको सूची की आवश्यकता है, तो उपयोग करें

List<String> asList = Arrays.asList(strArray);

फिर मुझे दो पंक्तियों का उपयोग करना होगा: स्ट्रिंग [] strArray = नया स्ट्रिंग [5]; Arrays.fill (strArray, "foo") ;; क्या एक-पंक्ति समाधान है?

आप सूची प्राप्त करने के लिए एक-पंक्ति समाधान के रूप में Collections.nCopies (5, "foo") का उपयोग कर सकते हैं :

List<String> strArray = Collections.nCopies(5, "foo");

या toArrayएक सरणी प्राप्त करने के लिए इसके साथ गठबंधन करें ।

String[] strArray = Collections.nCopies(5, "foo").toArray(new String[5]);

1
फिर मुझे दो लाइनों का उपयोग करना होगा String[] strArray = new String[5]; Arrays.fill(strArray, "foo");:। क्या एक-पंक्ति समाधान है?
लॉरट

बहुत ही सरल: Collections.nCopies (5, "foo") Thkns!
मार्सेलो रेबुकास

5

संस्करण आप आदिम सरणियों (जावा 8) के लिए उपयोग कर सकते हैं:

DoubleStream.generate(() -> 123.42).limit(777).toArray(); // returns array of 777 123.42 double vals

ध्यान दें कि वह लौटता है double[], नहींDouble[]

IntegerStream, DoubleStream, LongStream के लिए काम करता है

युपीडी

और स्ट्रिंग डुप्स के लिए आप उपयोग कर सकते हैं:

Stream.generate(() -> "value").limit(400).toArray()

कोई अतिरिक्त शुल्क की आवश्यकता नहीं है, सिंगल लाइन


2

यदि आपकी वस्तु अपरिवर्तनीय नहीं है या संदर्भ-पारदर्शी नहीं है, तो आप उपयोग कर सकते हैं

Stream.generate(YourClass::new).limit(<count>)

और इसे सूची में एकत्र करें

.collect(Collectors.toList())

या सरणी के लिए

.toArray(YourClass[]::new)

1

का उपयोग करके IntStream, आप एक पूर्णांक बना सकते हैं, उन्हें उस तत्व में मैप कर सकते हैं जिसे आप चाहते हैं और इसे एक सूची के रूप में इकट्ठा करें।

List<String> list = IntStream.rangeClosed(0, 5)
            .mapToObj(i -> "foo")
            .collect(Collectors.toList());

या, एक सरणी के रूप में

 String[] arr = IntStream.rangeClosed(0, 5)
            .mapToObj(i -> "foo")
            .toArray(String[]::new);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.