উত্তর:
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);
কপিরআফ, অ্যারেলিস্ট ব্যবহার করে অ্যারেতেও করা যেতে পারে।
জাভা -11 থেকে শুরু করে, বিকল্প Collection.toArray(IntFunction<T[]> generator)
হিসাবে একইটি অর্জনের জন্য API টি ব্যবহার করতে পারেন :
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
জাভা 8 তে:
String[] strings = list.parallelStream().toArray(String[]::new);
parallelStream()
পরিবর্তে সরল কেন stream()
?
জেনারিকস সমাধানটি যেকোনকে গোপন 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()));
}
}
যদি আপনার অ্যাপ্লিকেশনটি ইতিমধ্যে অ্যাপাচি কমন্স লাইব ব্যবহার করে থাকে তবে প্রতিবার নতুন খালি অ্যারে তৈরি না করার জন্য আপনি স্বীকৃত উত্তরটি কিছুটা সংশোধন করতে পারেন:
List<String> list = ..;
String[] array = list.toArray(ArrayUtils.EMPTY_STRING_ARRAY);
// or if using static import
String[] array = list.toArray(EMPTY_STRING_ARRAY);
বিভিন্ন ধরণের আরও কয়েকটি পূর্বপলিত খালি অ্যারে রয়েছে ArrayUtils
।
এছাড়াও আমরা আমাদের জন্য এইভাবে খালি অ্যারে তৈরি করতে জেভিএমকে কৌশল করতে পারি:
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()
where যেখানে কোনও সুস্পষ্ট কাস্টের প্রয়োজন হবে না তা ব্যবহার করে , 3. আপনি এমনকি বর্ধনও করেন না i
, এবং ৪। এ 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
।