JavaRush /جاوا بلاگ /Random-UR /سائیکل لکھنا بند کرو! جاوا 8 کے مجموعوں کے ساتھ کام کرنے ...

سائیکل لکھنا بند کرو! جاوا 8 کے مجموعوں کے ساتھ کام کرنے کے لیے سرفہرست 10 بہترین طریقے

گروپ میں شائع ہوا۔
میرے خیال میں JavaRush کے طلباء کو یہ بتانے کی ضرورت نہیں ہے کہ مجموعے کیا ہیں اور وہ کس کے لیے ہیں۔ تاہم، 8ویں ورژن کے اجراء کے بعد، بہت سے ابتدائی آپریشنز، جو پہلے 6-7 لائنوں کوڈ لیتے تھے، کو کم سے کم آسان کر دیا گیا۔ مزید اڈو کے بغیر، یہاں 10 بہترین Java8 کلیکشن فریم ورک کی تکنیکیں ہیں جو آپ کا بے شمار وقت اور جگہ بچائیں گی! سائیکل لکھنا بند کرو!  جاوا 8 - 1 کے مجموعوں کے ساتھ کام کرنے کے لیے سرفہرست 10 بہترین طریقےسب کو ہیلو، دوستو! عادت، جیسا کہ آپ جانتے ہیں، دوسری فطرت ہے۔ اور لکھنے کے عادی ہونے کے بعد، for (int i = 0; i <......)میں اسے دوبارہ سیکھنا نہیں چاہتا (خاص طور پر چونکہ یہ ڈیزائن کافی آسان اور قابل فہم ہے)۔ تاہم، لوپس کے اندر ہم اکثر وہی ابتدائی کارروائیاں دہراتے ہیں، جس سے ہم واقعی چھٹکارا حاصل کرنا چاہتے ہیں۔ Java8 کی ریلیز کے ساتھ، اوریکل نے اس میں ہماری مدد کرنے کا فیصلہ کیا۔ ذیل میں جمع کرنے کے 10 بہترین طریقے ہیں جو آپ کا ایک ٹن وقت اور کوڈ بچائیں گے۔

1. Iterable.forEach(صارف<? سپر T> ایکشن)

نام خود ہی بولتا ہے۔ actionگزرے ہوئے مجموعہ کے ذریعے اعادہ کرتا ہے اور ہر عنصر کے لیے لیمبڈا اظہار کو انجام دیتا ہے ۔
List <Integer> numbers = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7));
numbers.forEach(s -> System.out.print(s + " "));
1 2 3 4 5 6 7

2. Collection.removeIf(Predicate<? super E> filter)

کچھ بھی پیچیدہ نہیں۔ یہ طریقہ مجموعہ کے ذریعے اعادہ کرتا ہے اور ان عناصر کو ہٹاتا ہے جو مماثل ہیں filter۔
List <Integer> numbers = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7));
numbers.removeIf(s -> s > 5);
 numbers.forEach(s -> System.out.print(s + " "));
ایک لائن میں ہم فہرست سے 5 سے بڑے تمام نمبروں کو ہٹا دیتے ہیں۔

3. Map.forEach(BiConsumer<? super K, ? super V> ایکشن)

یہ طریقہ forEachنہ صرف ان کلاسوں کے لیے کام کرتا ہے جو انٹرفیس کو نافذ کرتی ہیں Collection، بلکہ ان کے لیے بھی Map۔
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин

4. Map.compute(K کلید، BiFunction<? super K،? super V، ? توسیع کرتا ہے V> remappingFunction)

یہ تھوڑا زیادہ خوفناک لگتا ہے، لیکن حقیقت میں یہ تمام پچھلے لوگوں کی طرح آسان ہے. مخصوص کلید کے لیے key، یہ طریقہ فنکشن کے نتیجے میں قدر کا تعین کرتا ہے remappingFunction۔ مثال کے طور پر:
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));

books.compute("Философия Java", (a,b) -> b+", крутой чувак");
System.out.println("_______________________");
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин
_______________________
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель, крутой чувак
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин
" جاوا فلسفہ " کا مصنف یقیناً اچھا ہے! :)

5. Map.computeIfAbsent(K کلید، فنکشن<؟ سپر K، ? توسیع کرتا ہے V> میپنگ فنکشن)

یہ طریقہ Map میں ایک نیا عنصر شامل کرے گا ، لیکن صرف اس صورت میں جب ایک ہی کلید والا عنصر وہاں نہ ہو۔ valueفنکشن پر عمل درآمد کا نتیجہ اسے تفویض کیا جائے گا mappingFunction۔ اگر ایسی کلید والا عنصر پہلے سے موجود ہے، تو اسے اوور رائٹ نہیں کیا جائے گا، بلکہ جگہ پر رہے گا۔ آئیے اپنی کتابوں پر واپس جائیں اور ایک نیا طریقہ آزمائیں:
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

books.computeIfAbsent("Гарри Поттер и узник Азкабана", b -> getHarryPotterAuthor());
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));
ہمارا فنکشن mappingFunction:
public static String getHarryPotterAuthor() {
        return "Джоан Роулинг";
    }
اور نئی کتاب یہ ہے:
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Гарри Поттер и узник Азкабана. Author: Джоан Роулинг
Название книги: Властелин Колец. Author: Джон Толкин

6. Map.computeIfPresent(K key, BiFunction<? super K,? super V, ? توسیع کرتا ہے V> remappingFunction)

ایک ہی اصول جیسا کہ، Map.compute()لیکن تمام حسابات صرف اس صورت میں کیے جائیں گے جب کلید والا عنصر keyپہلے سے موجود ہو۔
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

books.computeIfPresent("Евгений Онегин", (a,b) -> b="Александр Пушкин");
System.out.println("_________________");
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));
books.computeIfPresent("Братья Карамазовы", (a,b) -> b="Александр Пушкин");
System.out.println("_________________");
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));
جب پہلی بار فنکشن بلایا گیا تو کوئی تبدیلی نہیں ہوئی، کیونکہ Mapہماری کتاب میں "یوجین ونگین" کے عنوان سے کوئی کتاب نہیں ہے۔ لیکن دوسری بار پروگرام نے کتاب "دی برادرز کارامازوف" کے مصنف کو "الیگزینڈر پشکن" میں تبدیل کر دیا۔ نتیجہ:
_________________
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин
_________________
Название книги: Братья Карамазовы. Author: Александр Пушкин
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин

7. Map.getOrDefault(آبجیکٹ کلید، V ڈیفالٹ ویلیو)

کلید سے متعلقہ قدر لوٹاتا ہے key۔ اگر ایسی کلید موجود نہیں ہے تو، پہلے سے طے شدہ قدر لوٹاتا ہے۔
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

String igor = books.getOrDefault("Слово о полку Игореве", "Неизвестный автор");
System.out.println(igor);
بہت آرام سے:
Неизвестный автор

8. Map.merge(K کلید، V قدر، BiFunction<? super V،? super V، ? توسیع کرتا ہے V> remappingFunction)

میں نے یہ حساب لگانے کی کوشش بھی نہیں کی کہ کوڈ کی کتنی لائنیں یہ طریقہ آپ کو بچائے گا۔
  • اگر آپ میں Mapکلید keyموجود نہیں ہے ، یا valueاس کلید کے لیے یہ برابر ہے تو طریقہ nullشامل کرتا ہے ۔Mapkey-value
  • اگر کلید Keyموجود ہے اور وہ موجود ہے، تو value != nullطریقہ اسے valueمنظور شدہ فنکشن کو انجام دینے کے نتیجے میں تبدیل کر دیتا ہے remappingFunction۔
  • اگر remappingFunctionیہ واپس آتا ہے nullتو keyاسے مجموعہ سے ہٹا دیا جاتا ہے۔
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

books.merge("Философия Java", "Брюс Эккель", (a, b) -> b +  " и кто-то там еще");
books.forEach((a,b) -> System.out.println("Название:" + a + ". Author: " + b));
نتیجہ:
Название:Братья Карамазовы. Author: Федор Достоевский
Название:Философия Java. Author: Брюс Эккель и кто-то там еще
Название:Преступление и наказание. Author: Федор Достоевский
Название:Война и мир. Author: Лев Толстой
Название:Властелин Колец. Author: Джон Толкин
*معذرت بروس*

9. Map.putIfAbsent(K کلید، V قدر)

اس سے پہلے، اگر کوئی جوڑا Mapنہیں تھا تو اس میں شامل کرنے کے لیے، آپ کو درج ذیل کام کرنا پڑتا تھا:
Map <String, String> map = new HashMap<>();
if (map.get("Властелин Колец") == null)
    map.put("Властелин Колец", "Джон Толкин");
اب سب کچھ بہت آسان ہو گیا ہے:
Map<String, String> map = new HashMap<>();
map.putIfAbsent("Властелин Колец", "Джон Толкин");

10. Map.replace اور Map.replaceAll()

فہرست میں آخری، لیکن کم از کم نہیں۔ اگر ایسی کلید موجود ہو تو Map.replace(K key, V newValueکلیدی قدر کی جگہ لے لیتا ہے key۔ newValueاگر نہیں تو کچھ نہیں ہوتا۔ Map.replace(K key, V oldValue, V newValue)- ایک ہی کام کرتا ہے، لیکن صرف اس صورت میں جب موجودہ قدر keyہو oldValue۔ Map.replaceAll(BiFunction<? super K, ? super V, ? extends V> function)- تمام اقدار کو valueفنکشن کے عمل کے نتیجے سے بدل دیتا ہے function۔ مثال کے طور پر:
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

books.replace("Братья Карамазовы", "Брюс Эккель", "Джон Толкин");
books.forEach((a,b) -> System.out.println("Название:" + a + ". Author: " + b));
Название:Братья Карамазовы. Author: Федор Достоевский
Название:Философия Java. Author: Брюс Эккель
Название:Преступление и наказание. Author: Федор Достоевский
Название:Война и мир. Author: Лев Толстой
Название:Властелин Колец. Author: Джон Толкин
کام نھیں کیا! برادرز کارامازوف کلید کی موجودہ قیمت فیوڈور دوستوفسکی ہے، بروس ایکل نہیں، اس لیے کچھ بھی نہیں بدلا ہے۔
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

books.replaceAll((a,b) -> getCoolWriter());
books.forEach((a,b) -> System.out.println("Название:" + a + ". Author: " + b));
public static String getCoolWriter() {
        return "Крутой писатель";
    }
Название:Братья Карамазовы. Author: Крутой писатель
Название:Философия Java. Author: Крутой писатель
Название:Преступление и наказание. Author: Крутой писатель
Название:Война и мир. Author: Крутой писатель
Название:Властелин Колец. Author: Крутой писатель
بغیر کسی پیچیدہ تعمیرات کے پورے نقشے کی قدروں کو آسانی سے تبدیل کر دیا! PS کسی نئی چیز کی عادت ڈالنا ہمیشہ مشکل ہوتا ہے، لیکن یہ تبدیلیاں واقعی اچھی ہیں۔ کسی بھی صورت میں، میرے کوڈ کے کچھ حصے اب یقینی طور پر پہلے کے مقابلے میں کم سپتیٹی نما ہیں :) اگر آپ کو مضمون پسند آیا ہے اور نیا دیکھنا چاہتے ہیں، تو "پسند" پر کلک کر کے مقابلے میں مصنف کی حمایت کرنا نہ بھولیں، یا ابھی تک بہتر، "پسند" :) آپ کی پڑھائی میں اچھی قسمت!
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION