جيئن توهان کي خبر آهي، اسان جون عادتون ٻي فطرت آهن. ۽ هڪ دفعو توهان کي لکڻ جي عادت پئجي ويندي
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)
مون اهو ڳڻڻ جي ڪوشش به نه ڪئي ته ڪوڊ جون ڪيتريون لائينون هي طريقو توهان کي بچائيندو.- جيڪڏهن
key
توهان جي ۾ موجود نه آهيMap
، يا جيڪڏهنvalue
هن ڪنجي لاءِ آهيnull
، ته پوءِ طريقو منظور ٿيلkey-value
جوڙي کي شامل ڪري ٿوMap
. - جيڪڏهن
key
موجود آهي ۽ ان جيvalue != null
، پوء اهو طريقو ان جي قيمت کي عمل جي نتيجي ۾ تبديل ڪري ٿوremappingFunction
. - جيڪڏهن
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()
آخري پر اختتامي نه.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
هر هڪ کي فعل جي نتيجي سان بدلائي ٿو .
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 نئين کي استعمال ڪرڻ هميشه ڏکيو آهي، پر اهي تبديليون واقعي سٺيون آهن. ڪنهن به صورت ۾، منهنجي ڪوڊ جا ڪجهه حصا ضرور اڳ جي ڀيٽ ۾ سپتيٽي وانگر گهٽ آهن :) سکڻ ۾ سٺي قسمت!
GO TO FULL VERSION