JavaRush /جاوا بلاگ /Random-UR /لیمبڈاس اور ندیاں، صرف مشق، کوئی نظریہ نہیں۔

لیمبڈاس اور ندیاں، صرف مشق، کوئی نظریہ نہیں۔

گروپ میں شائع ہوا۔
سب کو سلام. مقابلے کے موقع پر میں نے یہاں مضمون نہیں بلکہ ایک مختصر سبق لکھنے کا فیصلہ کیا۔ یہ جاوا میں لیمبڈاس اور اسٹریمز کے بارے میں ہوگا۔ اگر آپ پہلے سے ہی واقف ہیں اور ان کا استعمال کرتے ہیں، تو براہ راست مضمون کے آخر میں جائیں، جاوا رش کے ساتھ کاموں کا ایک چھوٹا سا انتخاب ہوگا جس پر آپ مشق کر سکتے ہیں۔ آپ کو جاوا 8 اور اس سے زیادہ کی ضرورت ہے، JR سے تربیت، کچھ تفصیلات اور بہت سی ناقابل فہم چیزیں ہوں گی، اس کا پتہ لگانے کی شدید خواہش۔ آئیے اس حقیقت کے ساتھ شروع کرتے ہیں کہ میں لیمبڈاس اور ندیوں کے ظہور کی تاریخ کی وضاحت نہیں کروں گا، میں اسے خود نہیں جانتا ہوں۔ میں صرف اتنا جانتا ہوں کہ وہ فنکشنل پروگرامنگ اسٹائل سے ہمارے OOP اسٹائل میں آئے ہیں۔ اپنے مختصر سیکھنے کے تجربے میں، میں نے صرف یہ دکھایا کہ کیسے اور کیا، کچھ لوگوں کو خیال کو سمجھنا مشکل ہوتا ہے، اس لیے بس یاد رکھیں کہ کیسے لکھنا ہے، آپ بعد میں سمجھ جائیں گے۔

لیمبڈاس

لیمبڈاس اور اسٹریمز، صرف مشق، کوئی نظریہ نہیں - 1لیمبڈاس اور اسٹریمز، صرف مشق، کوئی نظریہ نہیں - 2اگر آپ نہیں جانتے کہ لیمبڈا بالکل کیا ہے، تو: ایک لیمبڈا اس طرح لگتا ہے:
(a, b) -> a.compareTo(b)
(переменные) -> действие
ابھی کے لیے اتنا ہی کافی ہے۔ آپ تھیوری کو یہاں پڑھ سکتے ہیں: لنک ایک ، لنک دو ، لیکن میرے خیال میں مشق زیادہ مزے کی ہے۔ میرا مشورہ ہے کہ آپ درج ذیل مسئلہ کو حل کریں: طریقہ 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 طلباء نے اس بارے میں کسی حد تک سمجھ حاصل کی کہ لیمبڈا کیا ہیں اور انہیں کیسے استعمال کیا جائے۔ یہ سلسلہ بندی کے لیے بہت ضروری ہوگا۔ اگر آپ نتیجہ کے بارے میں شیخی بگھارنا چاہتے ہیں اور یہ جاننا چاہتے ہیں کہ آیا آپ نے یہ ٹھیک کیا ہے تو کوڈ کو نجی پیغام میں بھیجیں۔ تبصرہ کرنے کی ضرورت نہیں ہے؛ آپ وہاں دلچسپ نکات شامل کر سکتے ہیں (لیکن اس طرح کہ کام کو آسان نہ بنایا جائے)۔ ایک بار پھر، اس مثال کو حل کرنے کے بعد، آپ کو پہلے سے ہی لیمبڈاس کو استعمال کرنے کے بارے میں اچھی طرح سے سمجھنا چاہئے۔
لیمبڈاس اور اسٹریمز، صرف مشق، کوئی نظریہ نہیں - 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 اسٹریمز کھولتے ہیں (کنسول اور فائل میں لکھنا)۔ ہم فائل کو ان طریقوں کے ذریعے پڑھتے ہیں جو ہمیں یا تو شیٹ یا اسٹریم (گوگل اور جاواڈاک) واپس کردیں گے۔

  • 1907 - نظریہ میں، یہ بھی ایک ندی میں حل کیا جا سکتا ہے. سٹریم میں ان پٹ فائل کا نام ہے، آؤٹ پٹ الفاظ کی دنیا کی تعداد ہے۔

بس۔ اگر میں کر سکتا ہوں، میں ایک اور سادہ کہانی لکھوں گا. میری رائے میں، کسی ٹھنڈی چیز کو آزمانے کے موقع کے بغیر پڑھنا کسی نہ کسی طرح بورنگ یا کچھ اور ہے۔ اور کیلکولیٹر اور 3 پہیلیاں کے بعد، مجھے لگتا ہے کہ آپ پہلے ہی لیمبڈاس اور اسٹریمز کے ساتھ اچھی طرح سے مل رہے ہیں، لہذا اگر آپ کے پاس پہلے سے موجود نہیں ہے تو تمام امکانات کے بارے میں پڑھیں۔ UPD:
  • 1016 - قدرے بگڑے ہوئے طریقے سے، آپ اسے 1 سلسلہ اور 1 واپسی میں حل کر سکتے ہیں۔

  • 1821 - بہت آسان اور 1 سلسلہ اور 1 واپسی میں۔

    یہ 2 کام آپ کو ایک اور سٹریمنگ طریقہ اور دوسرے کلکٹر سے متعارف کرائیں گے۔

  • 1925 - آپ ایک سٹریم میں الفاظ کے ساتھ ایک سطر حاصل کر سکتے ہیں اور پھر اسے فائل میں لکھ سکتے ہیں (مجھے نہیں معلوم کہ کسی سٹریم سے فائل پر لکھنا ممکن ہے یا نہیں)

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