JavaRush /جاوا بلاگ /Random-SD /ليمبڊاس ۽ وهڪرو، صرف مشق، ڪو به نظريو

ليمبڊاس ۽ وهڪرو، صرف مشق، ڪو به نظريو

گروپ ۾ شايع ٿيل
هيلو سڀ. مقابلي جي موقعي تي، مون هتي هڪ مضمون نه، پر هڪ مختصر سبق لکڻ جو فيصلو ڪيو. اهو جاوا ۾ لامبڊاس ۽ اسٽريمز بابت هوندو. جيڪڏھن توھان اڳ ۾ ئي واقف آھيو ۽ انھن کي استعمال ڪريو، پوءِ سڌو مضمون جي آخر ڏانھن وڃو، جاوا رش سان ڪمن جو ھڪڙو ننڍڙو انتخاب ھوندو جنھن تي توھان مشق ڪري سگھوٿا. توھان کي ضرورت آھي جاوا 8 ۽ اعليٰ، جي آر کان ٽريننگ، اتي ڪجھ تفصيل ۽ گھڻيون ئي سمجھ ۾ نہ ايندڙ شيون ھونديون، ان کي معلوم ڪرڻ جي سخت تمنا. اچو ته ان حقيقت سان شروع ڪريون ته مان لامباس ۽ ندين جي ظهور جي تاريخ بيان نه ڪندس، مان صرف پاڻ کي نه ٿو ڄاڻان. مان صرف ڄاڻان ٿو ته اهي فنڪشنل پروگرامنگ انداز کان آيا آهن، اسان جي او او پي انداز ڏانهن. منهنجي مختصر سکيا واري تجربي ۾، مون صرف اهو ڏيکاريو ته ڪيئن ۽ ڇا، ڪجهه ماڻهن کي ان خيال کي سمجهڻ ۾ ڏکيائي محسوس ٿئي ٿي، تنهن ڪري صرف ياد رکو ته ڪيئن لکڻو آهي، توهان بعد ۾ سمجھندا.

لمبداس

ليمبڊاس ۽ وهڪرو، صرف مشق، ڪو به نظريو - 1ليمبڊاس ۽ وهڪرو، صرف مشق، ڪو به نظريو - 2جيڪڏهن توهان کي خبر ناهي ته ليمبڊا ڇا آهن، پوء: هڪ ليمبڊا هن طرح نظر اچن ٿا:
(a, b) -> a.compareTo(b)
(переменные) -> действие
هاڻي لاءِ ايترو ئي ڪافي آهي. توھان ھي نظريو پڙھي سگھوٿا ھتي: link one , link two , پر مان سمجهان ٿو ته مشق تمام گھڻو مزو آھي. مان توھان کي ھيٺ ڏنل مسئلو حل ڪرڻ جي صلاح ڏيان ٿو: طريقو 1 استعمال ڪندي ھڪڙي حساب ڪتاب لکو. طريقو قبول ڪرڻ گهرجي 2 ڊجيٽل قدر ۽ ٻيو ڪجهه. توهان جو ڪوڊ ڪجهه هن طرح نظر ايندو:
class Lambda{
    public static void main (String[] args) {
	}

    public static double calculate(){
       	return null;
    }
}
توھان کي 3 پيرا ميٽر داخل ڪرڻ جي ضرورت آھي طريقي جي دستخط ۾ calculate، 1 ڪمانڊ شامل ڪريو return۽ ھن طريقي کي ڪال ڪرڻ جي جانچ ڪريو main. اهو طريقو ڇا ڪرڻ جي قابل هوندو؟
  • فولڊ
  • ضرب
  • ورهائڻ؛
  • ڪٽ؛
  • روٽ جو حساب ڪريو؛
  • طاقت کي وڌايو؛
  • هڪ طاقت ڏانهن وڌايو دليلن جو مجموعو ورهايل پهريون نمبر + 117؛
  • ۽ ٻيا سڀ آپريشن جيڪي توھان سوچي سگھو ٿا.
ڇا استعمال نه ڪجي:
  • if-else؛
  • charآپريشن جي اشاري طور؛
  • switch-case؛
  • ۽ ٻيو سڀ ڪجهه جيڪو توهان جي ذهن ۾ اچي ٿو.
توهان ڇا استعمال ڪري سگهو ٿا:
  • صرف ليمبڊاس، ڪم انهن تي آهي.
- ڇا؟ ۽ اهو سڀ ڪجهه آهي؟ - ها، اهو سڀ ڪجهه آهي، ڇاڪاڻ ته توهان کي لفظي طور تي 3 لائين شامل ڪرڻ جي ضرورت آهي، جيڪڏهن آئون گهٽ ۾ گهٽ هڪ تجويز ڪريان، باقي خودڪار طور تي لکيو ويندو. ۽ جيڪڏھن توھان چاھيو ٿا، توھان گوگل مثال ڪري سگھو ٿا ۽ سمجھڻ جي ڪوشش ڪريو. يقينن، توهان پاڻ کي جانچيندا ۽ جيڪڏهن توهان خيانت ڪندا ته ڪنهن کي خبر ناهي، پر پوء ڇو؟ اهڙو سادو مسئلو حل ڪرڻ سان، منهنجي سڀني 1.5 شاگردن کي چڱيءَ طرح ڄاڻ ملي ٿي ته ليمبڊا ڇا آهن ۽ انهن کي ڪيئن استعمال ڪجي. اهو اسٽريمنگ لاءِ تمام ضروري هوندو. جيڪڏھن توھان چاھيو ٿا ته نتيجن جي باري ۾ فخر ڪريو ۽ معلوم ڪريو ته ڇا توھان اھو صحيح ڪيو آھي، ڪوڊ موڪليو خانگي پيغام ۾. تبصرو ڪرڻ جي ڪا ضرورت ناهي؛ توهان اتي دلچسپ صلاحون شامل ڪري سگهو ٿا (پر اهڙي طريقي سان جيئن ڪم کي تمام آسان نه بڻائين). ٻيهر، هن مثال کي حل ڪرڻ بعد، توهان کي اڳ ۾ ئي ڄاڻ هجڻ گهرجي ته ڪيئن استعمال ڪجي lambdas.
ليمبڊاس ۽ اسٽريم، صرف مشق، ڪو به نظريو - 3
هاڻي اچو ته جاوا اسٽريمز ڏانهن وڃو. هي اهي وهڪرو نه آهن جن بابت توهان، پڙهندڙ، سوچيو هوندو. نه اهو ناهي inputStream۽ اهو ناهي OutputStream. اهو مختلف آهي، اهو وڌيڪ دلچسپ آهي. اسٽريمز کي تبديل ڪيو آهي چڪر، مڪمل طور تي نه، پر اڃا به. انهن کي مقصد سان پيش ڪيو ويو آهي "توضيح نه ڪريو ته اهو ڪيئن ڪجي، وضاحت ڪريو ته ڇا ڪجي." نديءَ جو هڪ ننڍڙو مثال:
List<String> myList = Arrays.asList("a1", "a2", "b1", "c2", "c1");

myList.stream()
    .filter(s -> s.startsWith("c"))
    .map(String::toUpperCase)
    .sorted()
    .forEach(System.out::println);
هتي ڇا ٿي رهيو آهي؟ اچو ته رايا شامل ڪريو:
myList.stream() // получить поток
    .filter(s -> s.startsWith("c")) //отфильтровать значения, оставить те, что начинаются с «с»
    .map(String::toUpperCase)  // преобразовать все значения, перевести в верхний регистр
    .sorted() // отсортировать по порядку (дефолтный порядо)
    .forEach(System.out::println); // вывести каждый элемент на экран
باقاعده لوپ سان مقابلو ڪريو:
List<String> toSort = new ArrayList<>();
for(String s : myList){
     if(s.startsWith("c")){
         toSort.add(s.toUpperCase());
     }
}

Collections.sort(toSort);

for(String s : toSort){
     System.ouy.println(s);
}
جڏهن توهان ڪوڊ پڙهو ٿا، هر شي خوفناڪ ڏسڻ ۾ اچي ٿي، پر اهو تبصرن سان آسان آهي؟ اهو عام آهي، مون انهن کي ڊگهي وقت تائين نه سمجهيو. سمجھڻ جي ڪنجي مشق آھي. تنهن ڪري، اسان ٽئين پارٽي جي آرٽيڪل پڙهڻ شروع ڪيو ۽ اسان جي سوالن جا جواب ڳولڻ شروع ڪيو، توهان انهن کي هتي تبصرن ۾ پڻ پڇي سگهو ٿا، مان مڪمل جواب نه ڏيندس، پر مان هدايت ڏيندس. JavaRush کان ڪمن جي فهرست جيڪي مان سمجهان ٿو ته اسٽريمنگ جي مشق لاءِ بهترين آهن:
  • 2208 - 1 وهڪرو ۽ 1 موٽڻ سان حل ڪري سگھجي ٿو، يعني. طريقي جي جسم سان شروع ٿيندي return۽ پوء اتي 1 سڄو وهڪرو هوندو. اچو ته گهرج کي ڇڏي ڏيو StringBuilder.

  • 1908 - توھان ان کي 1 وهڪرو ۽ 1 واپسي سان پڻ حل ڪري سگھو ٿا. فائل پڙهڻ سان شروع ٿي. مون کي خبر ناهي ته اسٽريمز ذريعي فائل کي ڪيئن رڪارڊ ڪجي (جيڪڏهن اهو ممڪن آهي)، هاڻي لاءِ اسان اهو دستي طور ڪريون ٿا. اهي. اسان صرف 2 اسٽريمز کوليون ٿا (ڪنسول ۽ فائل ڏانهن لکڻ). اسان فائل کي طريقن سان پڙهون ٿا جيڪي اسان کي يا ته هڪ شيٽ يا هڪ وهڪرو (google ۽ javadoc) واپس ڪنداسين.

  • 1907 - نظريي ۾، اهو پڻ هڪ وهڪرو ۾ حل ڪري سگهجي ٿو. وهڪرو ڏانهن ان پٽ فائل جو نالو آهي، آئوٽ پٽ دنيا جي لفظن جو تعداد آهي.

اهو ئي سڀ ڪجهه آهي. جيڪڏهن مان ڪري سگهان ٿو، مان هڪ ٻي سادي ڪهاڻي لکندس. منهنجي خيال ۾، ڪنهن به شيءِ جي باري ۾ پڙهڻ بغير ڪوشش ڪرڻ جي موقعي کان سواءِ ڪجهه بورنگ يا ڪجهه. ۽ ڳڻپيوڪر ۽ 3 پزلن کان پوءِ، مان سمجهان ٿو ته توهان اڳ ۾ ئي ليمبڊاس ۽ اسٽريمز سان چڱيءَ ريت گڏ ٿي رهيا آهيو، تنهن ڪري سڀني امڪانن جي باري ۾ پڙهو جيڪڏهن توهان وٽ اڳ ۾ ئي نه آهي. UPD:
  • 1016 - ٿورڙي خراب طريقي سان، توھان ان کي حل ڪري سگھو ٿا 1 وهڪرو ۽ 1 موٽڻ ۾؛

  • 1821 - تمام آسان ۽ 1 وهڪرو ۽ 1 واپسي ۾.

    اهي 2 ڪم توهان کي متعارف ڪرايو ويندو هڪ ٻيو اسٽريمنگ طريقو ۽ ٻيو ڪليڪٽر.

  • 1925 - توھان ھڪڙي اسٽريم ۾ لفظن سان ھڪڙي لائن حاصل ڪري سگھوٿا ۽ پوءِ ان کي ھڪڙي فائل ۾ لکو (مون کي خبر ناهي ته اھو ممڪن آھي ته ھڪڙي وهڪرو مان ھڪڙي فائل تي لکڻ)

تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION