مرکزی مواد پر جائیں
ماڈیول 7 · سبق 2 از 2کورس میں 14/14~15 min
ماڈیول اسباق (2/2)

اسٹریم API

جاوا میں اسٹریم API آپ کو فنکشنل پروگرامنگ کا فائدہ اٹھاتے ہوئے، اعلانیہ انداز میں اشیاء کے مجموعوں پر کارروائی کرنے کی اجازت دیتا ہے۔ ایک سلسلہ ڈیٹا کو ذخیرہ نہیں کرتا ہے، لیکن اس کے بجائے آپریشنز کی پائپ لائن کے ذریعے ماخذ (جیسے فہرست یا صف) سے عناصر لے جاتا ہے۔

ایک سٹریم پائپ لائن تین حصوں پر مشتمل ہے:

  1. ایک ذریعہ (جیسے، list.stream())
  2. صفر یا اس سے زیادہ انٹرمیڈیٹ آپریشن (جو ایک نیا سلسلہ واپس کرتے ہیں، جیسے، filter، map)
  3. ایک ٹرمینل آپریشن (جو ایک حتمی نتیجہ یا ضمنی اثر پیدا کرتا ہے اور سٹریم کو بند کرتا ہے، جیسے، collect، forEach، reduce)

کامن انٹرمیڈیٹ آپریشنز

انٹرمیڈیٹ آپریشنز سست ہیں: انہیں اس وقت تک انجام نہیں دیا جاتا جب تک کہ ٹرمینل آپریشن شروع نہ کیا جائے۔

  • filter(Predicate): بولین حالت کی بنیاد پر عناصر کو فلٹر کرتا ہے۔
  • map(Function): فنکشن کو لاگو کر کے ہر عنصر کو کسی اور چیز میں تبدیل کرتا ہے۔
  • sorted(): اسٹریم کے عناصر کو ترتیب دیتا ہے۔
Java
List<String> names = Arrays.asList("Marco", "Anna", "Giovanni");
List<String> filtered = names.stream()
                             .filter(name -> name.startsWith("M"))
                             .map(name -> name.toUpperCase())
                             .collect(Collectors.toList()); // "MARCO"

کامن ٹرمینل آپریشنز

  • forEach(Consumer): سٹریم کے ہر عنصر کے لیے ایک ایکشن کرتا ہے۔
  • collect(Collector): سلسلہ کے نتائج کو ایک کنٹینر میں جمع کرتا ہے (مثال کے طور پر، Collectors.toList() استعمال کرنے والی فہرست)۔
  • reduce(identity, BinaryOperator): اسٹریم عناصر کو ایک واحد مجموعی قدر میں جوڑتا ہے۔
Java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
int sum = numbers.stream()
                 .reduce(0, (a, b) -> a + b); // Sums all numbers: 10

خود ہی آزمائیں۔

ورزش#java.m7.l2.e1
کوششیں: 0لوڈ ہو رہا ہے…

نمبروں کے سلسلے کا استعمال کرتے ہوئے کوڈ کو مکمل کریں تاکہ صرف یکساں نمبروں کو فلٹر کریں، انہیں ایونز نام کی ایک نئی فہرست میں جمع کریں، اور System.out.println کا استعمال کرتے ہوئے اسے پرنٹ کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

`numbers.stream()` کال کرکے شروع کریں، `.filter(n -> n % 2 == 0)` شامل کریں، اور آخر میں `.collect(Collectors.toList())` کے ساتھ جمع کریں۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#java.m7.l2.e2
کوششیں: 0لوڈ ہو رہا ہے…

نقشہ کا استعمال کرتے ہوئے ناموں کی فہرست کے اندر موجود تمام ناموں کو بڑے حروف میں تبدیل کرنے کے لیے اسٹریمز کا استعمال کریں، اور طریقہ کے حوالے سے forEach کا استعمال کرتے ہوئے ایک ایک کرکے پرنٹ کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

`.map(s -> s.toUpperCase())` کے بعد ٹرمینل آپریشن `.forEach(System.out::println)` استعمال کریں۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#java.m7.l2.e3
کوششیں: 0لوڈ ہو رہا ہے…

سٹریم کا استعمال کرتے ہوئے نمبروں کی فہرست میں موجود تمام نمبروں کے مجموعے کا حساب لگا کر کوڈ کو مکمل کریں اور 0 کی ابتدائی قیمت کے ساتھ کم ٹرمینل آپریشن۔ رقم پرنٹ کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

`numbers.stream().reduce(0, (a, b) -> a + b)` استعمال کریں اور نتیجے میں آنے والے متغیر کو پرنٹ کریں۔

3 کوششوں کے بعد حل دستیاب ہے۔