CodeGym /جاوا بلاگ /Random-SD /لوپ لکڻ بند ڪريو! جاوا 8 ۾ مجموعن سان ڪم ڪرڻ لاءِ مٿيان 1...
John Squirrels
سطح
San Francisco

لوپ لکڻ بند ڪريو! جاوا 8 ۾ مجموعن سان ڪم ڪرڻ لاءِ مٿيان 10 بهترين طريقا

گروپ ۾ شايع ٿيل
لوپ لکڻ بند ڪريو!  جاوا 8 - 1 ۾ مجموعن سان ڪم ڪرڻ لاءِ مٿيان 10 بهترين طريقا جيئن توهان کي خبر آهي، اسان جون عادتون ٻي فطرت آهن. ۽ هڪ دفعو توهان کي لکڻ جي عادت پئجي ويندي for (int i = 0; i <......)، توهان جو ڪو به حصو نه ٿو چاهي ته هن تعمير کي ٻيهر سکڻ گهرجي (خاص طور تي ڇاڪاڻ ته اهو بلڪل سادو ۽ سمجھڻ وارو آهي). بهرحال، لوپ اڪثر ڪري بار بار استعمال ڪيا ويندا آهن ساڳيا بنيادي عملن کي انجام ڏيڻ لاءِ، ۽ ورجائي اها شيءِ آهي جنهن مان اسان تمام گهڻو نجات حاصل ڪرڻ چاهيون ٿا. جاوا 8 سان، Oracle اسان جي مدد ڪرڻ جو فيصلو ڪيو آهي. هيٺيان 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.
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> action)

اهو 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 key, BiFunction<? Super K,? Super V,? Extends 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
”جاوا ۾ سوچڻ“ جو ليکڪ يقيناً بهترين آهي! :)

5. Map.computeIfAbsent(K key، Function <? super K، ? extends V> mappingFunction)

اهو طريقو ۾ هڪ نئون عنصر شامل ڪندو 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, ? extensions 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فنڪشن جي پهرين سڏ ۾ ڪا به تبديلي نه آئي، ڇاڪاڻ ته اسان جي سنڌ ۾ "Eugene Onegin" نالي ڪو ڪتاب موجود ناهي پر ٻئي سڏ ۾، پروگرام "برادرز ڪرامازوف" جي ڪتاب جي ليکڪ کي اليگزينڊر پشڪين ۾ تبديل ڪيو. پيداوار:
_________________
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(Object key، V defaultValue)

اهو طريقو ملندڙ قدر واپس ڏئي ٿو 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 key, V value, BiFunction<? super V, ? super V, ? extensions 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 key، V قدر)

اڳي، هڪ جوڙي کي شامل ڪرڻ لاءِ 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