2017-06-25 33 views
5

को पार्स करने में यह स्ट्रिंग पार्स करने के लिए इस से धारा का उपयोग कर पूर्णांक तक बेहतर तरीका मौजूद है:जावा 8 स्ट्रीम पूर्णांक

String line = "1 2 3 4 5"; 
List<Integer> elements = Arrays.stream(line.split(" ")).mapToInt(x -> Integer.parseInt(x)) 
    .boxed().collect(Collectors.toList()); 
+0

आप 100% यकीन है कि इनपुट स्ट्रिंग अंतरिक्ष अलग चीजें हैं जो हर एक के लिए पार्स किया जा सकता शामिल हैं ' int'? अगर कोई विफल रहता है तो क्या होगा? तब क्या होना चाहिए? – Jubobs

उत्तर

9

आप एक कदम समाप्त कर सकते हैं अगर आप पूर्णांक के लिए सीधे स्ट्रिंग पार्स:

String line = "1 2 3 4 5"; 
List<Integer> elements = Arrays.stream(line.split(" ")).map(Integer::valueOf) 
    .collect(Collectors.toList()); 

या आप एक List<Integer> के बजाय एक int सरणी बनाने के द्वारा, आदिम प्रकार है, जो बेहतर प्रदर्शन देने के लिए छड़ी कर सकते हैं:

int[] elements = Arrays.stream(line.split(" ")).mapToInt(Integer::parseInt).toArray(); 

तुम भी

Pattern.compile(" ").splitAsStream(line) 

साथ

Arrays.stream(line.split(" ")) 

की जगह मुझे यकीन है कि जो अधिक कुशल है, हालांकि है नहीं कर रहा हूँ कर सकते हैं।

3

उस के बाद से उपलब्ध हो जाएगा यह करने के लिए एक और तरीका है जावा-9 के माध्यम से Scanner#findAll:

int[] result = scan.findAll(Pattern.compile("\\d+")) 
        .map(MatchResult::group) 
        .mapToInt(Integer::parseInt) 
        .toArray(); 
+0

हाय यूजीन! मैंने देखा है कि आपने इस दृष्टिकोण का उपयोग करके कम से कम एक समान प्रश्न का उत्तर दिया है। क्या आप कृपया कृपया बताएं कि आपको लौटाई गई धारा में 'मानचित्र (MatchResult :: समूह)' का उपयोग क्यों करना है? मेरा मतलब है, मुझे पता है कि मैं दस्तावेज़ों पर जा सकता हूं और पता लगा सकता हूं, लेकिन शायद भविष्य के पाठकों के लिए यह बेहतर होगा यदि आप इस दृष्टिकोण को थोड़ा सा समझाते हैं। धन्यवाद! –

+0

मैं यह देखने में असफल रहा कि अंतरिक्ष से अलग इनट वाली रेखा को पार्स किया गया है। क्या आप स्कैनर्स को तारों से पढ़ने के लिए इंगित कर सकते हैं? – tucuxi

+1

@FedericoPeraltaSchaffner यह regex में पहला मिलान समूह है ... इंडेक्स '0' के साथ। जब आप 'समूह() 'का उपयोग करते हैं तो आपको यही मिलता है। अगर आपको किसी अन्य समूह की ज़रूरत है, तो आप बस 'समूह (एन)' का उपयोग करें। और आप हमेशा – Eugene

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