2012-06-15 30 views
12

मान लें कि मेरे पास 1,2,3,4,5,6,7 इनपुट जैसे String के रूप में इनपुट का एक सेट है। मैं उन संख्याओं को ListLong ऑब्जेक्ट्स यानी List<Long> में परिवर्तित करना चाहता हूं।सूची <Long>

क्या कोई भी सबसे आसान तरीका सुझा सकता है?

उत्तर

-9

मैं उत्कृष्ट Google की गुवा लाइब्रेरी का उपयोग करने के लिए इसका उपयोग करूंगा। String.split कई परेशानी का कारण बन सकता है।

String numbers="1,2,3,4,5,6,7"; 
Iterable<String> splitIterator = Splitter.on(',').split(numbers); 
List<String> list= Lists.newArrayList(splitIterator); 
+0

धन्यवाद और यह काम किया गया। – Kathir

+6

यह समस्या का समाधान कैसे करता है? सूची कहां है? – Swamy

+3

मानक जावा का उपयोग न करें (इसलिए सबसे आसान तरीका नहीं), न ही समस्या को हल करें। –

40

आपका मतलब कुछ ऐसा है?

String numbers = "1,2,3,4,5,6,7"; 

List<Long> list = new ArrayList<Long>(); 
for (String s : numbers.split(",")) 
    list.add(Long.parseLong(s)); 

System.out.println(list); 

जावा 8 जब से तुम

List<Long> list = Stream.of(numbers.split(",")) 
     .map(Long::parseLong) 
     .collect(Collectors.toList()); 

लिटिल छोटे संस्करणों के रूप में यह पुनर्लेखन कर सकते हैं List<String>

List<String> fixedSizeList = Arrays.asList(numbers.split(",")); 
List<String> rezisableList = new ArrayList<>(fixedSizeList); 

या

List<String> list = new ArrayList<>(Arrays.asList(numbers.split(","))); 
onliner प्राप्त करना चाहते हैं, तो 0
+0

हाँ, आप सही हैं .. अन्य सरल तरीका ... – Kathir

3
String input = "1,2,3,4,5,6,7"; 
String[] numbers = input.split("\\,"); 
List<Integer> result = new ArrayList<Integer>(); 
for(String number : numbers) { 
    try { 
     result.add(Integer.parseInt(number.trim())); 
    } catch(Exception e) { 
     // log about conversion error 
    } 
} 
+0

क्या जावा या अपाचे कॉमन्स या किसी अन्य विधि में किसी विधि को कॉल करके सरल तरीके से परिणाम प्राप्त करने के लिए कोई उपयोगिता विधि उपलब्ध है? – Kathir

+0

स्ट्रिंग टू इंटीजर को कन्वर्ट करने के लिए आप विज़िटर पैटर्न के आधार पर कुछ अपाचे या अमरूद संग्रह का उपयोग कर सकते हैं, लेकिन यह कोड को सरल नहीं बनायेगा। यह पढ़ना मुश्किल हो जाएगा। – alexey28

+0

पाठ संपादित किया गया था, उन्होंने एक ऑब्जेक्ट सूची का अनुरोध किया था जो लंबी सूची नहीं है ... – jocelyn

2

आप उपयोग कर सकते हैं String.split() और Long.valueOf():

String numbers = "1,2,3,4,5,6,7"; 
List<Long> list = new ArrayList<Long>(); 
for (String s : numbers.split(",")) 
    list.add(Long.valueOf(s)); 

System.out.println(list); 
4

का उपयोग कर सरल और आसान समाधान (धागा के पूरा होने के लिए):

String str = "1,2,3,4,5,6,7"; 
List<Long> list = Arrays.stream(str.split(",")).map(Long::parseLong).collect(Collectors.toList()); 
System.out.println(list); 

[1, 2, 3, 4, 5, 6, 7]

और भी बेहतर, Pattern.splitAsStream() का उपयोग कर:

Pattern.compile(",").splitAsStream(str).map(Long::parseLong).collect(Collectors‌​.toList()); 
1

आप java8 पर नहीं कर रहे हैं और उपयोग करने के लिए नहीं करना चाहते हैं लूप होता है, तो आप Guava

List<Long> longValues = Lists.transform(Arrays.asList(numbersArray.split(",")), new Function<String, Long>() { 
       @Override 
       public Long apply(String input) { 
        return Long.parseLong(input.trim()); 
       } 
      }); 

उपयोग कर सकते हैं के रूप में दूसरों Java8 आपने स्ट्रीम के उपयोग कर सकते हैं के लिए उल्लेख किया है।

 List<Long> numbers = Arrays.asList(numbersArray.split(",")) 
           .stream() 
           .map(String::trim) 
           .map(Long::parseLong) 
           .collect(Collectors.toList());; 
+0

'Arrays.asList (numbersArray.split (", ")) के बजाय।स्ट्रीम() ', बस 'Arrays.stream (numbersArray.split (", "))' या 'Stream.of (numbersArray.split (", "))' का उपयोग किया जा सकता है। –

+0

@ UtkuÖzdemir वास्तव में cant। उस मामले में Lists.transform का उपयोग स्ट्रिंग से लांग को परिवर्तित करने के लिए नहीं किया जा सकता है। –

+0

मेरा मतलब जावा 8 समाधान है, अमरूद नहीं। –

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