java - जावा में सूची में सरणी को कनवर्ट करना




arrays list (12)

मैं सरणी को जावा में किसी सूची में कैसे परिवर्तित करूं?

मैंने Arrays.asList() उपयोग किया लेकिन व्यवहार (और हस्ताक्षर) किसी भी तरह से जावा एसई 1.4.2 (संग्रह में दस्तावेज़ अब) से बदल गया 8 और वेब पर पाए गए अधिकांश स्निपेट 1.4.2 व्यवहार का उपयोग करते हैं।

उदाहरण के लिए:

int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(spam)
  • 1.4.2 पर तत्व 1, 2, 3 युक्त एक सूची देता है
  • 1.5.0+ पर सरणी स्पैम वाली एक सूची देता है

कई मामलों में इसे पहचानना आसान होना चाहिए, लेकिन कभी-कभी यह ध्यान न दे सकता है:

Assert.assertTrue(Arrays.asList(spam).indexOf(4) == -1);

Arrays का उपयोग करना

सरणी को List बदलने का यह सबसे आसान तरीका है। हालांकि, यदि आप एक नया तत्व जोड़ने या सूची से मौजूदा तत्व को हटाने का प्रयास करते हैं, तो एक UnsupportedOperationException फेंक दिया जाएगा।

Integer[] existingArray = {1, 2, 3};
List<Integer> list1 = Arrays.asList(existingArray);
List<Integer> list2 = Arrays.asList(1, 2, 3);

// WARNING:
list2.add(1);     // Unsupported operation!
list2.remove(1);  // Unsupported operation!

ArrayList या अन्य सूची कार्यान्वयन का उपयोग करना

आप सरणी के सभी तत्वों को List कार्यान्वयन में जोड़ने के for लूप का उपयोग कर सकते हैं, उदाहरण के लिए ArrayList :

List<Integer> list = new ArrayList<>();
for (int i : new int[]{1, 2, 3}) {
  list.add(i);
}

जावा 8 में स्ट्रीम एपीआई का उपयोग करना

आप सरणी को एक स्ट्रीम में बदल सकते हैं, फिर विभिन्न संग्राहक का उपयोग करके स्ट्रीम एकत्र कर सकते हैं: जावा 8 में डिफ़ॉल्ट कलेक्टर स्क्रीन के पीछे ArrayList उपयोग करता है, लेकिन आप अपना पसंदीदा कार्यान्वयन भी लगा सकते हैं।

List<Integer> list1, list2, list3;
list1 = Stream.of(1, 2, 3).collect(Collectors.toList());
list2 = Stream.of(1, 2, 3).collect(Collectors.toCollection(ArrayList::new));
list3 = Stream.of(1, 2, 3).collect(Collectors.toCollection(LinkedList::new));

यह भी देखें:


  1. अमरू का उपयोग करना:

    Integer[] array = { 1, 2, 3};
    List<Integer> list = Lists.newArrayList(sourceArray);
    
  2. अपाचे कॉमन्स संग्रह का उपयोग करना:

    Integer[] array = { 1, 2, 3};
    List<Integer> list = new ArrayList<>(6);
    CollectionUtils.addAll(list, array);
    

आपको सरणी में डालना होगा

Arrays.asList((Object[]) array)

एक लाइन:

List<Integer> list = Arrays.asList(new Integer[] {1, 2, 3, 4});

जावा 9 में आपके पास नई सुविधा फैक्ट्री विधि सूची के माध्यम से अपरिवर्तनीय सूचियों का उपयोग करने का और भी शानदार समाधान है List.of :

List<String> immutableList = List.of("one","two","three");

( here से लापरवाही से कॉपी)


तो यह इस बात पर निर्भर करता है कि आप किस जावा संस्करण को आजमा रहे हैं-

जावा 7

 Arrays.asList(1, 2, 3);

या

       final String arr[] = new String[] { "G", "E", "E", "K" };
       final List<String> initialList = new ArrayList<String>() {{
           add("C");
           add("O");
           add("D");
           add("I");
           add("N");
       }};

       // Elements of the array are appended at the end
       Collections.addAll(initialList, arr);

या

Integer[] arr = new Integer[] { 1, 2, 3 };
Arrays.asList(arr);

जावा 8 में

int[] num = new int[] {1, 2, 3};
List<Integer> list = Arrays.stream(num)
                        .boxed().collect(Collectors.<Integer>toList())

संदर्भ - http://www.codingeek.com/java/how-to-convert-array-to-list-in-java/


यदि आप अपाचे कॉमन्स-लैंग का उपयोग करते हैं तो एक और कामकाज:

int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(ArrayUtils.toObject(spam));

जहां ArrayUtils.toObject int[] को Integer[] परिवर्तित करता है Integer[]


यदि आप जावा 8 (या बाद में) को लक्षित कर रहे हैं, तो आप इसे आजमा सकते हैं:

int[] numbers = new int[] {1, 2, 3, 4};
List<Integer> integers = Arrays.stream(numbers)
                        .boxed().collect(Collectors.<Integer>toList());

ध्यान दें:

Collectors.<Integer>toList() पर ध्यान दें Collectors.<Integer>toList() , यह सामान्य विधि आपको त्रुटि से बचने में मदद करती है " Collectors.<Integer>toList() टाइप करें: सूची से सूची में कनवर्ट नहीं किया जा सकता"।


यह बहुत देर हो चुकी है लेकिन यहां मेरे दो सेंट हैं। हमारे पास List<int> नहीं हो सकती है क्योंकि int एक प्राचीन प्रकार है, इसलिए हमारे पास केवल List<Integer> । इस मामले पर विचार करें कि हमारे पास ints की एक सरणी है और जावा 8 का उपयोग करना है:

 int[] ints = new int[] {1,2,3,4,5};
 List<Integer> list11 = Arrays.stream(ints).boxed().collect(Collectors.toList()); // Supported by Java 8

Integer सरणी के मामले में हम इसका उपयोग कर सकते हैं:

Integer[] integers = new Integer[] {1,2,3,4,5};
List<Integer> list21 =  Arrays.asList(integers); // Cannot modify returned list
List<Integer> list22 = new ArrayList<>(Arrays.asList(integers)); // good
List<Integer> list23 = Arrays.stream(integers).collect(Collectors.toList()); //Java 8

क्यों list21 संरचनात्मक रूप से संशोधित नहीं किया जा सकता है?

जब हम Arrays.asList का उपयोग Arrays.asList । सूची लौटाई गई सूची का आकार तय किया गया है क्योंकि लौटाई गई सूची java.util.ArrayList नहीं है, लेकिन java.util.Arrays अंदर परिभाषित एक निजी स्थैतिक वर्ग है। इसलिए यदि हम लौटाई गई सूची से तत्व जोड़ते या हटाते हैं, तो एक UnsupportedOperationException फेंक दिया जाएगा। इसलिए जब हम सूची को संशोधित करना चाहते हैं तो हमें सूची list22 साथ जाना चाहिए। अगर हमारे पास जावा 8 है तो हम list23 साथ भी जा सकते हैं।

स्पष्ट सूची list21 को list21 लिए संशोधित किया जा सकता है कि हम list21.set(index,element) को कॉल कर सकते हैं लेकिन यह सूची संरचनात्मक रूप से संशोधित नहीं की जा सकती है यानी सूची से तत्वों को जोड़ या हटा नहीं सकता है। आप यह question भी देख सकते हैं।

विशिष्ट कार्यान्वयन

यदि हम List जैसे toCollection विशिष्ट कार्यान्वयन चाहते हैं तो हम toCollection रूप में toCollection कर सकते हैं:

ArrayList<Integer> list24 = Arrays.stream(integers)
                          .collect(Collectors.toCollection(ArrayList::new));

यहां तक ​​कि छोटा:

List<Integer> list = Arrays.asList(1, 2, 3, 4);

समस्या यह है कि जावा 5 में varargs पेश किया गया और दुर्भाग्य से, Arrays.asList() को एक vararg संस्करण के साथ भी अधिभारित किया गया। तो Arrays.asList(spam) जावा 5 कंपाइलर द्वारा int arrays के vararg पैरामीटर के रूप में समझा जाता है।

प्रभावी जावा 2 एड, अध्याय 7, आइटम 42 में अधिक जानकारी में यह समस्या समझाई गई है।


सरणी को सूची में बदलने के लिए कोड की दो पंक्तियों का उपयोग करें यदि आप इसे पूर्णांक मान में उपयोग करते हैं तो आपको आदिम डेटा प्रकार के लिए ऑटोबॉक्सिंग प्रकार का उपयोग करना होगा

  Integer [] arr={1,2};
  Arrays.asList(arr);




data-conversion