तुम्हाला माहिती आहेच की, आपल्या सवयी हा दुसरा स्वभाव आहे. आणि एकदा का तुम्हाला लिहिण्याची सवय झाली की
for (int i = 0; i <......)
, तुमच्यातील कोणत्याही भागाला ही रचना पुन्हा शिकण्याची गरज नाही (विशेषत: ते अगदी सोपे आणि समजण्यासारखे आहे). तथापि, समान मूलभूत ऑपरेशन्स करण्यासाठी लूपचा वारंवार वापर केला जातो आणि पुनरावृत्ती ही अशी गोष्ट आहे ज्यापासून आपण मुक्त होऊ इच्छितो. Java 8 सह, ओरॅकलने आम्हाला हे करण्यात मदत करण्याचा निर्णय घेतला आहे. खाली 10 सर्वोत्कृष्ट संकलन पद्धती आहेत ज्या तुमचा बराच वेळ आणि कोड वाचवतील.
1. Iterable.forEach(ग्राहक <? सुपर T> क्रिया)
नाव स्वतःच बोलते. वितर्क म्हणून पास केलेल्या संग्रहावर ते पुनरावृत्ती करते आणि त्याच्या प्रत्येक घटकासाठी क्रिया lambda अभिव्यक्ती कार्यान्वित करते.
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> क्रिया)
ही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
"थिंकिंग इन जावा" चा लेखक नक्कीच मस्त आहे! :)
5. Map.computeIfAbsent(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 की, 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(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 की, V मूल्य, BiFunction<? super V, ? super V, ? विस्तारित 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 की, 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()
शेवटचे पण महत्त्वाचे.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