میرے خیال میں JavaRush کے طلباء کو یہ بتانے کی ضرورت نہیں ہے کہ مجموعے کیا ہیں اور وہ کس کے لیے ہیں۔ تاہم، 8ویں ورژن کے اجراء کے بعد، بہت سے ابتدائی آپریشنز، جو پہلے 6-7 لائنوں کوڈ لیتے تھے، کو کم سے کم آسان کر دیا گیا۔ مزید اڈو کے بغیر، یہاں 10 بہترین Java8 کلیکشن فریم ورک کی تکنیکیں ہیں جو آپ کا بے شمار وقت اور جگہ بچائیں گی! سب کو ہیلو، دوستو! عادت، جیسا کہ آپ جانتے ہیں، دوسری فطرت ہے۔ اور لکھنے کے عادی ہونے کے بعد،
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
شامل کرتا ہے ۔Map
key-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 کسی نئی چیز کی عادت ڈالنا ہمیشہ مشکل ہوتا ہے، لیکن یہ تبدیلیاں واقعی اچھی ہیں۔ کسی بھی صورت میں، میرے کوڈ کے کچھ حصے اب یقینی طور پر پہلے کے مقابلے میں کم سپتیٹی نما ہیں :) اگر آپ کو مضمون پسند آیا ہے اور نیا دیکھنا چاہتے ہیں، تو "پسند" پر کلک کر کے مقابلے میں مصنف کی حمایت کرنا نہ بھولیں، یا ابھی تک بہتر، "پسند" :) آپ کی پڑھائی میں اچھی قسمت!
GO TO FULL VERSION