سلام! هن آرٽيڪل ۾، اسان ڏسنداسين ته عناصر جي فهرست کي ڪيئن بدلجي جاوا ۾ عناصر جي هڪ صف ۾. درحقيقت، هن کي ڪرڻ لاء ڪيترائي طريقا نه آهن، ۽ اهي سڀئي سادو آهن، تنهنڪري مضمون پيچيده نه ٿيندو. اچو ته فوري طور تي فيصلو ڪريون ته اسان ڇا سان ڪم ڪري رهيا آهيون. اسان فهرستن کي صفن ۾ تبديل ڪنداسين، ۽ خاص طور تي، اسٽرنگ جي ھڪڙي فهرست: I، love، learning، on، JavaRush کي ساڳين تارن جي صف ۾ تبديل ڪيو ويندو. پر پهرين، ٿورو بونس. اچو ته ان بابت ڳالهايون ته تڪڙو فهرست ڪيئن لکجي.
ڪيئن جلدي لکڻ لاء هڪ فهرست ترتيب ڏيڻ لاء
ياد رکو: هن زندگي ۾ ٻه منظر آهن. جڏهن اسان هڪ نئين لسٽ کي شروع ڪريون ٿا ته پهريون مڪمل مايوسي ۽ بوريت آهي:List<String> wordsList = new ArrayList();
۽ پوءِ اسان ان ۾ قدر شامل ڪريون ٿا... هڪ هڪ ڪري...
wordsList.add("I");
wordsList.add("love");
wordsList.add("learning");
wordsList.add("on");
wordsList.add("JavaRush");
سٺو ناهي. مون کي وسري ويو ته لسٽ جي ضرورت ڇو هئي جڏهن مان ان کي ٺاهي رهيو هوس! ٻيو طريقو اهو آهي ته سڀني غير ضروري شين کي ختم ڪيو وڃي ۽ اپنائڻ... يوٽيلٽي ڪلاسز. مثال طور، طبقو Arrays
، جنهن ۾ هڪ ناقابل يقين حد تائين آسان طريقو آهي asList
. توھان ان ۾ داخل ڪري سگھوٿا جيڪو توھان لسٽ ڪرڻ چاھيو ٿا، ۽ طريقو اھو ھڪڙي فهرست ٺاھيندو. ڪجهه هن طرح:
List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
اهو طريقو پاڻ ۾ وٺندو آهي varargs
- هڪ معنى ۾، هڪ صف. مان ان حقيقت لاءِ معافي وٺان ٿو ته لسٽ ٽو ايري نالي ليڪچر ۾ مون توهان کي پهرين لسٽ ڪرڻ سيکاري هئي، پر حالتن جي گهرج هئي. خير، هاڻي فهرستن کي صفن ۾ تبديل ڪرڻ لاءِ اسان جي طريقن ڏانهن.
طريقو نمبر 1. ڦاٽو
اهو طريقو انهن لاءِ ڀرپور آهي جيڪي ڪي بورڊ تي ڪوڊ ٽائپ ڪرڻ پسند ڪن ٿا بغير ڪنهن سوچ جي. مراقبي جو هڪ قسم. مرحلا 1. فهرست جي ساڳي ڊگھائي جي ھڪڙي ترتيب ٺاھيو:List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
String[] wordsArray = new String[wordsList.size()];
مرحلا 2. لسٽ جي سڀني عنصرن جي ذريعي ٻيهر ورجائڻ لاءِ ڪائونٽر سان لوپ ٺاهيو ۽ انڊيڪس ذريعي صفن تائين رسائي حاصل ڪرڻ جي قابل ٿي وڃو:
for (int i = 0; i < wordsList.size(); i++) {
}
قدم 3. لوپ جي اندر، اسان لسٽ جي هر عنصر جي قيمت انڊيڪس i سان ترتيب ڏيون ٿا انڊيڪس i سان ايري سيل ڏانهن:
for (int i = 0; i < wordsList.size(); i++) {
wordsArray[i] = wordsList.get(i);
}
نتيجو:
public static void main(String[] args) {
List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
String[] wordsArray = new String[wordsList.size()];
for (int i = 0; i < wordsList.size(); i++) {
wordsArray[i] = wordsList.get(i);
}
}
طريقو نمبر 2. toArray جو طريقو
شايد استعمال ڪرڻ لاء سڀ کان وڌيڪ مناسب شيء. انٽرفيسList
۾ ٻه طريقا آهن toArray
جيڪي موجوده فهرست مان هڪ صف ٺاهي رهيا آهن:
Object[] toArray();
T[] toArray(T[] a);
پهريون طريقو شيون جي هڪ صف ڏي ٿو جنهن ۾ موجوده فهرست جي سڀني عناصر شامل آهن (پهرين کان آخري تائين):
public class Main {
public static void main(String[] args) {
List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
String[] wordsArray = (String[]) wordsList.toArray();
for (String word : wordsArray) {
System.out.println(word);
}
}
}
اچو ته طريقي سان هلون main
۽ هيٺيان ڏسو:
I
love
learning
on
JavaRush
بهرحال، هن طريقي ۾ هڪ خاصيت آهي: اهو هميشه شين جي هڪ صف کي واپس ڏئي ٿو (Object[])
. تنهن ڪري، واپسي نتيجن کي گهربل ڊيٽا جي قسم ڏانهن وڌايو وڃي. مٿي ڏنل مثال ۾ اسان ان کي تارن جي صف ۾ اڇلائي ڇڏيو (String[])
. پر اهو طريقو دليلن کي قبول نٿو ڪري، جيڪو ڪجهه حالتن ۾ آسان ٿي سگهي ٿو. ٻيو طريقو پڻ هڪ صف ڏي ٿو جنهن ۾ موجوده فهرست جي سڀني عناصر شامل آهن (پهرين کان آخري تائين). جڏهن ته، پهرين جي برعڪس، ٻيو طريقو هڪ خاص قسم جي صف کي هڪ دليل طور وٺندو آهي. پر ٻئي طريقي جي نتيجي ۾ شيون جي هڪ صف نه هوندي، پر هڪ مخصوص ڊيٽا جي قسم جو هڪ صف - ساڳيو طريقي سان ڊيٽا جي قسم جي طور تي دليلن جي طور تي منظور ڪيو ويو آهي.
public class Main {
public static void main(String[] args) {
List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
String[] wordsArray = wordsList.toArray(new String[0]);
for (String word : wordsArray) {
System.out.println(word);
}
}
}
جيڪڏهن اسان طريقي سان هلون ٿا main
، اسان کي ساڳيو لفظ ڏسڻ ۾ اينديون.
I
love
learning
on
JavaRush
اچو ته ان صف جي باري ۾ ٿورڙي ڳالهه ڪريون جيڪا دليل طور منظور ڪئي وئي آهي toArray
. طريقي جي منطق تي منحصر آهي منتقل ٿيل صف جي ڊيگهه تي. اتي ٽي ممڪن منظرنامو آهن:
1. منتقل ٿيل صف جي ڊگھائي لسٽ جي ڊيگهه کان گھٽ آھي
انهي صورت ۾، طريقو هڪ نئين صف ٺاهي ٿو ۽ فهرست عناصر کي ان ۾ رکي ٿو. اسان مٿي ڏنل مثال ۾ اهو ظاهر ڪيو آهي.2. پاس ٿيڻ واري عنصر جي ڊيگهه لسٽ جي ڊيگهه جي برابر آهي
طريقو لسٽ عناصر کي منظور ٿيل صف ۾ رکندو. اچو ته هن جو مظاهرو ڪريون:public class Main {
public static void main(String[] args) {
List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
// Создаем пустой массив нужной длины
String[] array = new String[wordsList.size()];
// Отправляем пустой массив в метод toArray
wordsList.toArray(array);
// Проверяем, заполнился ли наш массив. Спойлер: да
for (String word : array) {
System.out.println(word);
}
}
}
جڏهن آئوٽ ڪيو، اسان سڀ هڪجهڙا لائين ڏسنداسين، ۽ اهو واضح ٿي ويندو ته طريقو اسان جي ٺاهيل صف کي ڀريو آهي.
3. منتقل ٿيل صف جي ڊيگهه لسٽ جي ڊيگهه کان وڌيڪ آهي
اهو طريقو فهرست جي سڀني عنصرن کي هڪ صف ۾ لکندو، ۽ آخري شامل ڪيل عنصر جي اڳيان سيل ۾ قيمت لکندوnull
. اچو ته هن جو مظاهرو ڪريون:
public class Main {
public static void main(String[] args) {
List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
// Создаем пустой массив, длина которого в 2 раза больше длины списка
String[] array = new String[wordsList.size() * 2];
for (int i = 0; i < array.length; i++) {
// В каждую ячейку запишем строковое представление текущего индекса
array[i] = String.valueOf(i);
}
// Отправляем массив в метод toArray
wordsList.toArray(array);
// Проверяем, что лежит в нашем массиве
for (String word : array) {
System.out.println(word);
}
}
}
ڪنسول ۾ طريقو هلائڻ کان پوءِ main
اسين هيٺيون ڏسنداسين:
I
love
learning
on
JavaRush
null
6
7
8
9
توهان کي ٽن مان ڪهڙو طريقو چونڊڻ گهرجي؟ جاوا جي شروعاتي ورزن ۾، فهرست جي ڊگھائي جي برابر يا ان کان وڌيڪ ڊگھائي سان ھڪڙي صف کي پاس ڪرڻ لاءِ بھتر ھو. جڏهن ته، جديد JVMs ۾ اصلاحون آهن، ۽ ڪجهه حالتن ۾ اهي هڪ طريقي جي لاء تيز ڪارڪردگي مهيا ڪن ٿيون جيڪي لسٽ جي ڊيگهه جي ڀيٽ ۾ ننڍڙي ڊيگهه جي هڪ صف کي منظور ڪن ٿا. تنهن ڪري جيڪڏهن توهان جاوا جو جديد نسخو هلائي رهيا آهيو، هڪ خالي صف کي طريقي سان منتقل ڪريو جيئن اسان پهرين مثال ۾ ڪيو هو:
wordsList.toArray(new String[0]);
طريقو نمبر 3. اسٽريم API
اهو طريقو انهن لاءِ موزون آهي جيڪي نه رڳو هڪ فهرست کي هڪ صف ۾ تبديل ڪرڻ چاهين ٿا، پر ان سان گڏ ڪجهه ٻين مسئلن کي به حل ڪرڻ چاهين ٿا. ۽ پڻ جاوا اسٽريم API سان واقف ماڻهن لاءِ. JavaRush هن موضوع تي هڪ سٺو مضمون آهي . هن حصي ۾ اسين اسٽريم استعمال ڪندي ڪيترن ئي مثالن تي نظر وجهنداسين. اسٽريم استعمال ڪندي لسٽ کي صف ۾ ڪيئن بدلجي:public class Main {
public static void main(String[] args) {
List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
String[] strings = wordsList.stream()
.toArray(String[]::new);
for (String s : strings) {
System.out.println(s);
}
/*
Output:
I
love
learning
on
JavaRush
*/
}
}
پر جيڪڏهن توهان کي صرف هڪ فهرست کي هڪ صف ۾ اڇلائڻ جي ضرورت آهي، ته اهو بهتر آهي ته اهو طريقو استعمال ڪندي toArray
طريقو نمبر 2 ۾ بيان ڪيو ويو آهي. پر جيڪڏھن توھان چاھيو ٿا ته نه رڳو ھڪڙي فهرست کي ھڪڙي صف ۾ تبديل ڪريو، پر ھر عنصر تي ڪجھ عمل ڪرڻ لاء، پوء اھو توھان لاء صحيح جڳھ آھي. اچو ته لسٽ کي هڪ صف ۾ تبديل ڪرڻ جي ڪوشش ڪريون ته جيئن آخري صف ۾ سڀئي لائينون اپر اکر ۾ لکجن:
public class Main {
public static void main(String[] args) {
List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
String[] strings = wordsList.stream()
.map(str -> str.toUpperCase())
.toArray(String[]::new);
for (String s : strings) {
System.out.println(s);
}
/*
Output:
I
LOVE
LEARNING
ON
JAVARUSH
*/
}
}
هتي .map(str -> str.toUpperCase())
اسان بيان ڪيو آهي ته فهرست ۾ هر لڪير سان ڇا ڪرڻ جي ضرورت آهي. انهي حالت ۾، اسان هر اسٽرنگ کي اپر ڪيس ۾ تبديل ڪرڻ جو فيصلو ڪيو ۽ پوء ان کي هڪ صف ۾ گڏ ڪيو. اسٽريم API استعمال ڪندي توهان کي اجازت ڏئي ٿي ته نه صرف هر قيمت کي تبديل ڪرڻ، پر انهن کي فلٽر پڻ. فرض ڪريو اسان اسٽرنگ جي لسٽ مان هڪ ايري گڏ ڪرڻ چاهيون ٿا، پر اهڙي طرح ته صرف ٻن اکرن کان ڊگھي اسٽرنگ کي صف ۾ شامل ڪيو وڃي:
public class Main {
public static void main(String[] args) {
List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
String[] strings = wordsList.stream()
.filter(str -> str.length() > 2)
.map(str -> str.toUpperCase())
.toArray(String[]::new);
for (String s : strings) {
System.out.println(s);
}
/*
Output:
LOVE
LEARNING
JAVARUSH
*/
}
}
هتي قطار ۾ .filter(str -> str.length() > 2)
اسان هڪ نام نهاد فلٽر ٺاهيو آهي جيڪو فهرست جي هر عنصر تي لاڳو ڪيو ويندو ان کان اڳ ان جي صف ۾ وڃڻ کان اڳ. انهي صورت ۾، طريقو هر قطار لاء سڏيو ويندو آهي length()
، ۽ جيڪڏهن اظهار جو نتيجو str.length() > 2
صحيح آهي، اهڙي قطار نتيجو چونڊ ۾ ختم ٿي ويندي، ۽ آخرڪار صف ۾. ٻي صورت ۾، اهو نه ماريندو. هتي، شايد، اهو چوڻ جي قابل آهي ته اهو ساڳيو ئي حاصل ڪري سگهجي ٿو صرف عناصر تي ٻيهر ورجائڻ ۽ مختلف پابنديون لاڳو ڪرڻ سان. توهان هن طريقي سان پڻ ڪري سگهو ٿا. اسٽريم API اهڙين مسئلن کي حل ڪرڻ لاءِ وڌيڪ فنڪشنل طريقه ڪار مهيا ڪري ٿي.
نتيجا
هن آرٽيڪل ۾، اسان فهرستن کي صفن ۾ تبديل ڪرڻ لاء مختلف طريقن سان ڏٺو:- سادي ڳولا؛
- طريقو
toArray;
- اسٽريم API.
toArray
جيڪو انٽرفيس ۾ بيان ڪيو ويو آهي List
. اهڙا ٻه طريقا آهن:
Object[] toArray();
T[] toArray(T[] a);
GO TO FULL VERSION