CodeGym /جاوا بلاگ /Random-UR /لوپس لکھنا بند کرو! جاوا 8 میں مجموعوں کے ساتھ کام کرنے ک...
John Squirrels
سطح
San Francisco

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

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

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

نام خود ہی بولتا ہے۔ یہ ایک دلیل کے طور پر منظور کردہ مجموعہ پر اعادہ کرتا ہے، اور اس کے ہر ایک عنصر کے لیے ایکشن لیمبڈا اظہار کو انجام دیتا ہے۔
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("War and Peace", "Leo Tolstoy");
books.put("Crime and Punishment", "Fyodor Dostoevsky");
books.put("Thinking in Java", "Bruce Eckel");
books.put("The Brothers Karamazov", "Fyodor Dostoevsky");
books.put("The Lord of the Rings", "John Tolkien");
books.forEach((a,b) -> System.out.println("Book title: " + a + ". Author: "+ b));
Book title: The Brothers Karamazov. Author: Fyodor Dostoevsky
Book title: Thinking in Java. Author: Bruce Eckel
Book title: Crime and Punishment. Author: Fyodor Dostoevsky
Book title: War and Peace. Author: Leo Tolstoy
Book title: Lord of the Rings. Author: John Tolkien

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

تھوڑا زیادہ ڈرانے والا لگتا ہے، لیکن حقیقت میں سادہ، پچھلے تمام لوگوں کی طرح۔ یہ طریقہ keyعمل درآمد کے نتیجے کے برابر کی قدر کا تعین کرتا ہے mappingFunction۔ مثال کے طور پر:
Map <String, String> books = new HashMap<>();
books.put("War and Peace", "Leo Tolstoy");
books.put("Crime and Punishment", "Fyodor Dostoevsky");
books.put("Thinking in Java", "Bruce Eckel");
books.put("The Brothers Karamazov", "Fyodor Dostoevsky");
books.put("The Lord of the Rings", "John Tolkien");
books.forEach((a,b) -> System.out.println("Book title: " + a + ". Author: "+ b));

books.compute("Thinking in Java", (a,b) -> b + ", cool dude");
System.out.println("_______________________");
books.forEach((a,b) -> System.out.println("Book title: " + a + ". Author: "+ b));
Book title: The Brothers Karamazov. Author: Fyodor Dostoevsky
Book title: Thinking in Java. Author: Bruce Eckel
Book title: Crime and Punishment. Author: Fyodor Dostoevsky
Book title: War and Peace. Author: Leo Tolstoy
Book title: Lord of the Rings. Author: John Tolkien
_______________________
Book title: The Brothers Karamazov. Author: Fyodor Dostoevsky
Book title: Thinking in Java. Author: Bruce Eckel, cool dude
Book title: Crime and Punishment. Author: Fyodor Dostoevsky
Book title: War and Peace. Author: Leo Tolstoy
Book title: Lord of the Rings. Author: John Tolkien
"Thinking in Java" کا مصنف یقیناً اچھا ہے! :)

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

یہ طریقہ میں ایک نیا عنصر شامل کرے گا Map، لیکن صرف اس صورت میں جب اس میں اس کلید کے ساتھ کوئی عنصر پہلے سے موجود نہ ہو۔ تفویض کردہ قدر کو عمل میں لانے کا نتیجہ ہوگا mappingFunction۔ اگر کلید کے ساتھ کوئی عنصر پہلے سے موجود ہے تو اسے اوور رائٹ نہیں کیا جائے گا۔ یہ بس ویسے ہی رہے گا۔ آئیے اپنی کتابوں کی طرف لوٹتے ہیں اور ایک نیا طریقہ آزماتے ہیں:
Map <String, String> books = new HashMap<>();
books.put("War and Peace", "Leo Tolstoy");
books.put("Crime and Punishment", "Fyodor Dostoevsky");
books.put("Thinking in Java", "Bruce Eckel");
books.put("The Brothers Karamazov", "Fyodor Dostoevsky");
books.put("The Lord of the Rings", "John Tolkien");

books.computeIfAbsent("Harry Potter and the Prisoner of Azkaban", b -> getHarryPotterAuthor());
books.forEach((a,b) -> System.out.println("Book title: " + a + ". Author: "+ b));
یہاں ہمارا ہے mappingFunction:
public static String getHarryPotterAuthor() {
        return "Joanne Rowling";
    }
اور یہاں نئی ​​کتاب ہے:
Book title: The Brothers Karamazov. Author: Fyodor Dostoevsky
Book title: Thinking in Java. Author: Bruce Eckel
Book title: Crime and Punishment. Author: Fyodor Dostoevsky
Book title: War and Peace. Author: Leo Tolstoy
Book title: Harry Potter and the Prisoner of Azkaban. Author: Joanne Rowling
Book title: Lord of the Rings. Author: John Tolkien

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

یہاں ہمارے پاس وہی اصول ہے جیسا کہ Map.compute()، لیکن حسابات صرف اس صورت میں کیے جاتے ہیں جب کوئی شے keyپہلے سے موجود ہو۔
Map <String, String> books = new HashMap<>();
books.put("War and Peace", "Leo Tolstoy");
books.put("Crime and Punishment", "Fyodor Dostoevsky");
books.put("Thinking in Java", "Bruce Eckel");
books.put("The Brothers Karamazov", "Fyodor Dostoevsky");
books.put("The Lord of the Rings", "John Tolkien");

books.computeIfPresent("Eugene Onegin", (a,b) -> b = "Alexander Pushkin");
System.out.println("_________________");
books.forEach((a,b) -> System.out.println("Book title: " + a + ". Author: "+ b));
books.computeIfPresent("The Brothers Karamazov", (a,b) -> b = "Alexander Pushkin");
System.out.println("_________________");
books.forEach((a,b) -> System.out.println("Book title: " + a + ". Author: "+ b));
فنکشن کے لیے پہلی کال میں کوئی تبدیلی نہیں کی گئی، کیونکہ ہمارے Map. لیکن دوسری کال میں، پروگرام نے کتاب "دی برادرز کارامازوف" کے مصنف کو تبدیل کر کے الیگزینڈر پشکن کر دیا۔ آؤٹ پٹ:
_________________
Book title: The Brothers Karamazov. Author: Fyodor Dostoevsky
Book title: Thinking in Java. Author: Bruce Eckel
Book title: Crime and Punishment. Author: Fyodor Dostoevsky
Book title: War and Peace. Author: Leo Tolstoy
Book title: Lord of the Rings. Author: John Tolkien
 _________________
Book title: The Brothers Karamazov. Author: Alexander Pushkin
Book title: Thinking in Java. Author: Bruce Eckel
Book title: Crime and Punishment. Author: Fyodor Dostoevsky
Book title: War and Peace. Author: Leo Tolstoy
Book title: Lord of the Rings. Author: John Tolkien

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

یہ طریقہ اس سے متعلقہ قدر لوٹاتا ہے key۔ اگر کلید موجود نہیں ہے، تو یہ پہلے سے طے شدہ قدر لوٹاتا ہے۔
Map <String, String> books = new HashMap<>();
books.put("War and Peace", "Leo Tolstoy");
books.put("Crime and Punishment", "Fyodor Dostoevsky");
books.put("Thinking in Java", "Bruce Eckel");
books.put("The Brothers Karamazov", "Fyodor Dostoevsky");
books.put("The Lord of the Rings", "John Tolkien");

String igor = books.getOrDefault("The Tale of Igor's Campaign", "Unknown author");
System.out.println(igor);
یہ بہت آسان ہے:
Unknown author

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

میں نے یہ حساب لگانے کی زحمت بھی نہیں کی کہ کوڈ کی کتنی لائنیں یہ طریقہ آپ کو بچائے گا۔
  1. اگر keyآپ کے میں موجود نہیں ہے Map، یا اگر valueاس کلید کے لیے ہے null، تو طریقہ پاس شدہ key-valueجوڑے کو میں شامل کرتا ہے Map۔
  2. اگر keyموجود ہے اور اس کا value != null، تو طریقہ اس کی قدر کو پھانسی دینے کے نتیجے میں بدل دیتا ہے remappingFunction۔
  3. اگر remappingFunctionواپس آتا ہے null، تو keyمجموعہ سے ہٹا دیا جاتا ہے۔
Map <String, String> books = new HashMap<>();
books.put("War and Peace", "Leo Tolstoy");
books.put("Crime and Punishment", "Fyodor Dostoevsky");
books.put("Thinking in Java", "Bruce Eckel");
books.put("The Brothers Karamazov", "Fyodor Dostoevsky");
books.put("The Lord of the Rings", "John Tolkien");

books.merge("Thinking in Java", "Bruce Eckel", (a, b) -> b + " and some coauthor");
books.forEach((a, b) -> System.out.println("Title: " + a + ". Author: "+ b));
آؤٹ پٹ:
Title: The Brothers Karamazov. Author: Fyodor Dostoevsky
Title: Thinking in Java. Author: Bruce Eckel and some coauthor
Title: Crime and Punishment. Author: Fyodor Dostoevsky
Title: War and Peace. Author: Leo Tolstoy
Title: Lord of the Rings. Author: John Tolkien
*معذرت، بروس*

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

پہلے، a میں ایک جوڑا شامل کرنے کے لیے Map، اگر یہ پہلے سے موجود نہیں تھا، تو آپ کو درج ذیل کام کرنا پڑتا تھا:
Map <String, String> map = new HashMap<>();
if (map.get("Lord of the Rings") == null)
    map.put("Lord of the Rings", "John Tolkien");
اب سب کچھ بہت آسان ہو گیا ہے:
Map<String, String> map = new HashMap<>();
map.putIfAbsent("Lord of the Rings", "John Tolkien");

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

آخری لیکن کم از کم نہیں۔
  1. Map.replace(K key, V newValue)keyکی قدر کو سے بدل دیتا ہے newValue، اگر ایسی کلید موجود ہو۔ اگر نہیں تو کچھ نہیں ہوتا۔
  2. Map.replace(K key, V oldValue, V newValue)ایک ہی کام کرتا ہے، لیکن صرف اس صورت میں جب موجودہ قیمت کے keyبرابر ہو oldValue۔
  3. Map.replaceAll(BiFunction<? super K, ? super V, ? extends V> function)ہر ایک کو valueفنکشن کے نتیجے سے بدل دیتا ہے۔
مثال کے طور پر:
Map <String, String> books = new HashMap<>();
books.put("War and Peace", "Leo Tolstoy");
books.put("Crime and Punishment", "Fyodor Dostoevsky");
books.put("Thinking in Java", "Bruce Eckel");
books.put("The Brothers Karamazov", "Fyodor Dostoevsky");
books.put("The Lord of the Rings", "John Tolkien");

books.replace("The Brothers Karamazov", "Bruce Eckel", "John Tolkien");
books.forEach((a, b) -> System.out.println("Title: " + a + ". Author: "+ b));
Title: The Brothers Karamazov. Author: Fyodor Dostoevsky
Title: Thinking in Java. Author: Bruce Eckel
Title: Crime and Punishment. Author: Fyodor Dostoevsky
Title: War and Peace. Author: Leo Tolstoy
Title: Lord of the Rings. Author: John Tolkien
یہ کام نہیں کیا! کلید "دی برادرز کارامازوف" کی موجودہ قیمت "فیوڈور دوستوفسکی" ہے، "بروس ایکل" نہیں، اس لیے کچھ بھی نہیں بدلا ہے۔
Map  books = new HashMap<>();
books.put("War and Peace", "Leo Tolstoy");
books.put("Crime and Punishment", "Fyodor Dostoevsky");
books.put("Thinking in Java", "Bruce Eckel");
books.put("The Brothers Karamazov", "Fyodor Dostoevsky");
books.put("The Lord of the Rings", "John Tolkien");

books.replaceAll((a,b) -> getCoolAuthor());
books.forEach((a, b) -> System.out.println("Title: " + a + ". Author: "+ b));

public static String getCoolAuthor() {
        return "Cool author";
     }
Title: The Brothers Karamazov. Author: Cool author
Title: Thinking in Java. Author: Cool author
Title: Crime and Punishment. Author: Cool author
Title: War and Peace. Author: Cool author
Title: Lord of the Rings. Author: Cool author
Mapہم نے بغیر کسی پیچیدہ تعمیرات کے پورے کے لیے قدروں کو آسانی سے تبدیل کر دیا ! PS نئے کی عادت ڈالنا ہمیشہ مشکل ہوتا ہے، لیکن یہ تبدیلیاں واقعی اچھی ہیں۔ کسی بھی صورت میں، میرے کوڈ کے کچھ حصے یقینی طور پر پہلے کی نسبت اسپگیٹی کی طرح کم ہیں :) سیکھنے میں اچھی قسمت!
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION