JavaRush /جاوا بلاگ /Random-SD /جاوا لسٽ کي صف ۾ آڻيو: عناصر جي فهرست کي صف ۾ تبديل ڪريو
Анзор Кармов
سطح
Санкт-Петербург

جاوا لسٽ کي صف ۾ آڻيو: عناصر جي فهرست کي صف ۾ تبديل ڪريو

گروپ ۾ شايع ٿيل
سلام! هن آرٽيڪل ۾، اسان ڏسنداسين ته عناصر جي فهرست کي ڪيئن بدلجي جاوا ۾ عناصر جي هڪ صف ۾. درحقيقت، هن کي ڪرڻ لاء ڪيترائي طريقا نه آهن، ۽ اهي سڀئي سادو آهن، تنهنڪري مضمون پيچيده نه ٿيندو. جاوا لسٽ کي صف ۾ آڻيو: عناصر جي فهرست کي صف ۾ تبديل ڪريو - 1اچو ته فوري طور تي فيصلو ڪريون ته اسان ڇا سان ڪم ڪري رهيا آهيون. اسان فهرستن کي صفن ۾ تبديل ڪنداسين، ۽ خاص طور تي، اسٽرنگ جي ھڪڙي فهرست: 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);
پھريون ھڪڙو دليلن کي قبول نٿو ڪري، پر شين جي ھڪڙي صف کي واپس ڪري ٿو، اھو ئي سبب آھي جو توھان کي اڪثر ڪري پڌرو قسم جي ڪاسٽنگ جو رستو اختيار ڪرڻو پوندو. ٻيو واپسي گهربل قسم جي هڪ صف کي، پر هڪ آري کي هڪ دليل طور وٺي ٿو. اهو بهتر آهي ته هڪ خالي صف کي طريقي سان منتقل ڪرڻ، ۽ توهان خوش ٿي ويندا. اسٽريم API کي استعمال ڪرڻ توهان کي اجازت ڏئي ٿو نه رڳو هڪ فهرست کي هڪ صف ۾ تبديل ڪرڻ، پر ڪجهه عملن کي پڻ انجام ڏيڻ جي طريقي سان، جهڙوڪ فلٽر ڪرڻ يا تبديل ڪرڻ عناصر کي صف ۾ شامل ڪرڻ کان اڳ.

گهر جو ڪم

ڪوشش ڪريو ھن مضمون مان سڀ مثال پاڻ ورجائڻ جي، پر اسٽرنگ جي اصل لسٽ بدران، 0 کان 10 تائين جي عددن جي فهرست استعمال ڪريو. قدرتي طور، توھان کي انھن مثالن مان ڪجھ شرطن کي اپنائڻو پوندو، جيڪي صرف تارن تي لاڳو ٿين ٿيون. حالتون.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION