जवाबों:
List<String> list = ..;
String[] array = list.toArray(new String[0]);
उदाहरण के लिए:
List<String> list = new ArrayList<String>();
//add some stuff
list.add("android");
list.add("apple");
String[] stringArray = list.toArray(new String[0]);
toArray()
किसी भी तर्क रिटर्न गुजर बिना विधि Object[]
। तो आपको एक तर्क के रूप में एक सरणी पास करना होगा, जो सूची से डेटा से भर जाएगा, और वापस आ जाएगा। आप एक खाली सरणी भी पास कर सकते हैं, लेकिन आप वांछित आकार के साथ एक सरणी भी पास कर सकते हैं।
महत्वपूर्ण अद्यतन : मूल रूप से ऊपर उपयोग किए गए कोड new String[list.size()]
। हालांकि, इस ब्लॉगपोस्ट से पता चलता है कि जेवीएम अनुकूलन के कारण, new String[0]
अब उपयोग करना बेहतर है।
Class
वस्तु होनी चाहिए, जो सामान्य प्रकार से प्राप्त करने के लिए पूरी तरह से असंभव लगती है। इसका कारण, जैसा कि मैंने कहा, यह है कि पूरा निर्माण नकली है; यह सब सिर्फ आंतरिक रूप से ऑब्जेक्ट के रूप में संग्रहीत है।
जावा 8 में एक विकल्प:
String[] strings = list.stream().toArray(String[]::new);
जावा 11+:
String[] strings = list.toArray(String[]::new);
toArray
एक Stream
वस्तु पर उपयोग कर सकते हैं । यह संकलन त्रुटि तब हो सकती है यदि आप ए का उपयोग करके स्ट्रीम को कम करते हैं Collectors
और फिर लागू करने का प्रयास करते हैं toArray
।
आप इसके लिए toArray()
विधि का उपयोग कर सकते हैं List
:
ArrayList<String> list = new ArrayList<String>();
list.add("apple");
list.add("banana");
String[] array = list.toArray(new String[list.size()]);
या आप मैन्युअल रूप से तत्वों को एक सरणी में जोड़ सकते हैं:
ArrayList<String> list = new ArrayList<String>();
list.add("apple");
list.add("banana");
String[] array = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
array[i] = list.get(i);
}
उम्मीद है की यह मदद करेगा!
ArrayList<String> arrayList = new ArrayList<String>();
Object[] objectList = arrayList.toArray();
String[] stringArray = Arrays.copyOf(objectList,objectList.length,String[].class);
CopyOf, ArrayList से सरणियों का उपयोग भी किया जा सकता है।
Java-11 से शुरू, कोई वैकल्पिक रूप से एपीआई Collection.toArray(IntFunction<T[]> generator)
का उपयोग कर सकता है जैसे:
List<String> list = List.of("x","y","z");
String[] arrayBeforeJDK11 = list.toArray(new String[0]);
String[] arrayAfterJDK11 = list.toArray(String[]::new); // similar to Stream.toArray
जेनेटिक्स समाधान किसी List<Type>
को गुप्त करने के लिए String []
:
public static <T> String[] listToArray(List<T> list) {
String [] array = new String[list.size()];
for (int i = 0; i < array.length; i++)
array[i] = list.get(i).toString();
return array;
}
नोट आपको override toString()
विधि करनी चाहिए ।
class Car {
private String name;
public Car(String name) {
this.name = name;
}
public String toString() {
return name;
}
}
final List<Car> carList = new ArrayList<Car>();
carList.add(new Car("BMW"))
carList.add(new Car("Mercedes"))
carList.add(new Car("Skoda"))
final String[] carArray = listToArray(carList);
List <String> list = ...
String[] array = new String[list.size()];
int i=0;
for(String s: list){
array[i++] = s;
}
यदि डेटा का कुछ अतिरिक्त हेरफेर वांछित है, जिसके लिए उपयोगकर्ता एक फ़ंक्शन चाहता है, तो यह दृष्टिकोण सही नहीं है (क्योंकि इसमें तत्व के वर्ग को दूसरे पैरामीटर के रूप में पारित करने की आवश्यकता है), लेकिन काम करता है:
आयात java.util.ArrayList; आयात java.lang.reflect.Array;
public class Test {
public static void main(String[] args) {
ArrayList<Integer> al = new ArrayList<>();
al.add(1);
al.add(2);
Integer[] arr = convert(al, Integer.class);
for (int i=0; i<arr.length; i++)
System.out.println(arr[i]);
}
public static <T> T[] convert(ArrayList<T> al, Class clazz) {
return (T[]) al.toArray((T[])Array.newInstance(clazz, al.size()));
}
}
यदि आपका एप्लिकेशन पहले से ही Apache Commons lib का उपयोग कर रहा है, तो आप हर बार एक नया खाली सरणी नहीं बनाने के लिए स्वीकृत उत्तर को थोड़ा संशोधित कर सकते हैं:
List<String> list = ..;
String[] array = list.toArray(ArrayUtils.EMPTY_STRING_ARRAY);
// or if using static import
String[] array = list.toArray(EMPTY_STRING_ARRAY);
विभिन्न प्रकारों के कुछ और प्रचारित खाली सरणियाँ हैं ArrayUtils
।
इसके अलावा, हम JVM को इस तरह से हमारे लिए खाली सरणी बनाने के लिए ट्रिक कर सकते हैं:
String[] array = list.toArray(ArrayUtils.toArray());
// or if using static import
String[] array = list.toArray(toArray());
लेकिन इस तरह से वास्तव में कोई फायदा नहीं है, सिर्फ स्वाद की बात है, आईएमओ।
आप निम्न Iterator<String>
तत्वों का उपयोग कर सकते हैं ArrayList<String>
:
ArrayList<String> list = new ArrayList<>();
String[] array = new String[list.size()];
int i = 0;
for (Iterator<String> iterator = list.iterator(); iterator.hasNext(); i++) {
array[i] = iterator.next();
}
अब आप तत्वों को String[]
किसी भी लूप का उपयोग करने से रोक सकते हैं ।
.toString()
जहां कोई स्पष्ट कलाकारों की आवश्यकता होगी, का उपयोग करना, 3. आप वेतन वृद्धि भी नहीं करते हैं i
, और 4. while
बेहतर होगा कि इसकी जगह ए for
। सुझाया गया कोड:ArrayList<String> stringList = ... ; String[] stringArray = new String[stringList.size()]; int i = 0; for(Iterator<String> it = stringList.iterator(); it.hasNext(); i++) { stringArray[i] = it.next(); }
जावा 11 में, हम Collection.toArray(generator)
विधि का उपयोग कर सकते हैं । निम्नलिखित कोड तार का एक नया सरणी बनाएगा:
List<String> list = List.of("one", "two", "three");
String[] array = list.toArray(String[]::new)
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
String [] strArry= list.stream().toArray(size -> new String[size]);
प्रति टिप्पणियों में, मैंने यह समझाने के लिए एक अनुच्छेद जोड़ा है कि रूपांतरण कैसे काम करता है। सबसे पहले, सूची एक स्ट्रिंग स्ट्रीम में बदल जाती है। तब यह स्ट्रीम में तत्वों को एक ऐरे में बदलने के लिए Stream.toArray का उपयोग करता है। "आकार -> नया स्ट्रिंग [आकार]" के ऊपर अंतिम कथन में वास्तव में एक इंटफ़ंक्शन फ़ंक्शन है जो स्ट्रिंग स्ट्रीम के आकार के साथ स्ट्रिंग सरणी आवंटित करता है। कथन के समान है
IntFunction<String []> allocateFunc = size -> {
return new String[size];
};
String [] strArry= list.stream().toArray(allocateFunc);
आप इस विधि का उपयोग करके सूची को स्ट्रिंग सरणी में परिवर्तित कर सकते हैं:
Object[] stringlist=list.toArray();
पूरा उदाहरण:
ArrayList<String> list=new ArrayList<>();
list.add("Abc");
list.add("xyz");
Object[] stringlist=list.toArray();
for(int i = 0; i < stringlist.length ; i++)
{
Log.wtf("list data:",(String)stringlist[i]);
}
private String[] prepareDeliveryArray(List<DeliveryServiceModel> deliveryServices) {
String[] delivery = new String[deliveryServices.size()];
for (int i = 0; i < deliveryServices.size(); i++) {
delivery[i] = deliveryServices.get(i).getName();
}
return delivery;
}
toArray(T[])
और करने के लिए वाक्य रचना में इसी तरह कीStream.toArray
।