2016-11-29 4 views
8

मैं एक स्ट्रिंग है:जावा ints के 8 परिवर्तित स्ट्रिंग सूची में <Integer>

List<Integer> intList 

मैं करने के लिए इसे बदलने में सक्षम हूं:

String ints = "1, 2, 3"; 

मैं इसे ints की एक सूची में बदलने के लिए चाहते हैं इस तरह तारों की एक सूची:

List<String> list = Stream.of("1, 2, 3").collect(Collectors.toList()); 

लेकिन इनट्स की सूची नहीं।

कोई विचार?

+4

आपकी अंतिम पंक्ति कोड आपको "1, 2, 3" मान के साथ बिल्कुल एक स्ट्रिंग के साथ एक सूची देगी। क्या आपका मतलब था: 'Stream.of ("1", "2", "3") '? – Jesper

उत्तर

17

आप स्ट्रिंग विभाजित है और प्रत्येक भागों में से एक स्ट्रीम बनाने की जरूरत है जो खोज रहे हैं है। विधि splitAsStream(input) वास्तव में है कि:

Pattern pattern = Pattern.compile(", "); 
List<Integer> list = pattern.splitAsStream(ints) 
          .map(Integer::valueOf) 
          .collect(Collectors.toList()); 

यह इनपुट स्ट्रिंग के हिस्से के एक Stream<String> देता है, जिसे आप बाद में एक Integer करने के लिए नक्शे और एक सूची में एकत्र कर सकते हैं।

ध्यान दें कि आप पैटर्न को निरंतर स्टोर करना चाहते हैं, और इसे हर बार इसकी पुन: उपयोग करना चाहते हैं।

+2

@ इगोर वास्तव में कोई विजेता नहीं है, कार्य करने के लिए केवल अलग-अलग समाधान हैं। एक सरणी बनाना और इसे स्ट्रीम करने के लिए पास करना।कामों के साथ-साथ, और उन स्ट्रिंग्स के आधार पर जिन्हें आप पार्स करना चाहते हैं, और सटीक डिलीमीटर (यदि यह '", "' 'नहीं है, तो शायद' splitAsStream' के साथ यह समाधान दूसरे की तुलना में तेज़ होगा। इसे मापने की जरूरत है। – Tunaki

+4

मैं इसे अपने ऊपर पसंद करूंगा। 'Pattern.splitAsStream() 'विधि से अवगत नहीं था। अति उत्कृष्ट! –

+6

आप 'Pattern.compile (",", Pattern.LITERAL) का उपयोग कर सकते हैं;' इंजन को संकेत देने के लिए कि कोई वास्तविक पैटर्न मिलान नहीं है। बेशक, इंजन ध्वज के बिना खुद को पता लगाएगा, लेकिन ध्वज को निर्दिष्ट करने से पैटर्न का विश्लेषण करने की प्रक्रिया को छोड़ दिया जाएगा। – Holger

14

नियमित अभिव्यक्ति बंटवारे आप के लिए

Stream.of(ints.split(", ")) 
     .map(Integer::parseInt) 
     .collect(Collectors.toList()); 
+0

हां, लेकिन उन्होंने विशेष रूप से इस –

+0

को हल करने के लिए जावा 8 तरीके से पूछा कि यह एक सूची Rainer

+5

नहीं बनाई गई है, यदि इनपुट एक सरणी है, तो मैं हमेशा 'Arrays.stream' का उपयोग करने की सलाह देता हूं, यानी जब वास्तविक varargs आमंत्रण नहीं होता है। इससे यह स्पष्ट हो जाता है कि हम एक सरणी पर स्ट्रीम करते हैं और एकल तत्व स्ट्रीम बनाने के बजाय आदिम प्रकार के सरणी के लिए सही तरीके से काम करेंगे। इस विशिष्ट मामले के लिए, दोनों एक ही करेंगे। – Holger

2

सबसे पहले, स्ट्रिंग को अलग-अलग संख्याओं में विभाजित करें, फिर उन (अभी भी स्ट्रिंग) को वास्तविक पूर्णांक में परिवर्तित करें, और अंत में उन्हें एक सूची में एकत्र करें। आप स्ट्रीम ऑपरेशंस को चेन करके यह सब कर सकते हैं।

String ints = "1, 2, 3"; 
List<Integer> intList = Stream 
     .of(ints.split(", ")) 
     .map(Integer::valueOf) 
     .collect(Collectors.toList()); 
System.out.println(intList); // [1, 2, 3] 
0

आप केवल ऐरे फ़ंक्शन के रूप में सूची का उपयोग कर सकते हैं, और फिर इसे जावा 8 तरीके से परिवर्तित कर सकते हैं।

सफेद रिक्त स्थान को हटाने के लिए मत भूलना।

List<Integer> erg = Arrays.asList(ints.replace(" ", "").split(",")).stream().map(Integer::parseInt).collect(Collectors.toList()); 

संपादित करें: क्षमा करें मैं नहीं देखा था कि यह एक एकल स्ट्रिंग थी, सोचा था कि यह तार का एक सरणी था।

संबंधित मुद्दे