CodeGym/Java Blog/சீரற்ற/சுழல்கள் எழுதுவதை நிறுத்து! ஜாவா 8 இல் சேகரிப்புகளுடன் பண...
John Squirrels
நிலை 41
San Francisco

சுழல்கள் எழுதுவதை நிறுத்து! ஜாவா 8 இல் சேகரிப்புகளுடன் பணிபுரிவதற்கான முதல் 10 சிறந்த நடைமுறைகள்

சீரற்ற குழுவில் வெளியிடப்பட்டது
members
சுழல்கள் எழுதுவதை நிறுத்து!  ஜாவா 8 - 1 இல் சேகரிப்புகளுடன் பணிபுரிவதற்கான சிறந்த 10 சிறந்த நடைமுறைகள் உங்களுக்குத் தெரியும், எங்கள் பழக்கவழக்கங்கள் இரண்டாவது இயல்பு. நீங்கள் எழுதப் பழகிவிட்டால் for (int i = 0; i <......), உங்களில் எந்தப் பகுதியினரும் இந்தக் கட்டமைப்பை மீண்டும் படிக்க விரும்பவில்லை (குறிப்பாக இது மிகவும் எளிமையாகவும் புரிந்துகொள்ளக்கூடியதாகவும் இருப்பதால்). இருப்பினும், அதே அடிப்படை செயல்பாடுகளைச் செய்ய லூப்கள் அடிக்கடி மீண்டும் மீண்டும் பயன்படுத்தப்படுகின்றன, மேலும் மீண்டும் மீண்டும் செய்வது என்பது நாம் விடுபட விரும்புகிறோம். ஜாவா 8 உடன், ஆரக்கிள் இதைச் செய்ய எங்களுக்கு உதவ முடிவு செய்துள்ளது. ஒரு டன் நேரத்தையும் குறியீட்டையும் மிச்சப்படுத்தும் 10 சிறந்த சேகரிப்பு முறைகள் கீழே உள்ளன.

1. Iterable.forEach(நுகர்வோர் <? Super 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(முன்கணிப்பு<? 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 கீ, 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
"Thinking in Java" ஆசிரியர் கண்டிப்பாக அருமை! :)

5. Map.computeIfAbsent(K விசை, செயல்பாடு <? super K, ? நீட்டிக்கிறது 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 கீ, 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 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, ? extends V> remappingFunction)

இந்த முறை உங்களைச் சேமிக்கும் குறியீட்டின் எத்தனை வரிகளைக் கணக்கிட முயற்சித்தாலும் நான் கவலைப்படவில்லை.
  1. keyஉங்களில் இல்லை என்றால் Map, அல்லது valueஇந்த விசைக்கானது என்றால் null, இந்த முறையானது கடந்து செல்லும் key-valueஜோடியை க்கு சேர்க்கிறது Map.
  2. இருந்தால் keyமற்றும் அதன் value != null, முறை அதன் மதிப்பை செயல்படுத்துவதன் விளைவாக மாற்றுகிறது remappingFunction.
  3. திரும்பினால் , remappingFunctionசேகரிப்பில் இருந்து அகற்றப்படும்.nullkey
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 மதிப்பு)

முன்பு, ஒரு ஜோடியைச் சேர்க்க 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
அது வேலை செய்யவில்லை! "The Brothers Karamazov" இன் தற்போதைய மதிப்பு "Fyodor Dostoevsky", "Bruce Eckel" அல்ல, அதனால் எதுவும் மாறவில்லை.
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 புதியவற்றைப் பழக்கப்படுத்துவது எப்போதும் கடினம், ஆனால் இந்த மாற்றங்கள் மிகவும் நல்லது. எப்படியிருந்தாலும், எனது குறியீட்டின் சில பகுதிகள் நிச்சயமாக முன்பை விட ஸ்பாகெட்டியைப் போல குறைவாகவே உள்ளன :) கற்றலில் நல்ல அதிர்ஷ்டம்!
கருத்துக்கள்
  • பிரபலமானவை
  • புதியவை
  • பழையவை
ஒரு கருத்தைத் தெரிவிக்க நீங்கள் உள்நுழைந்திருக்க வேண்டும்
இந்தப் பக்கத்தில் இதுவரை எந்தக் கருத்தும் வழங்கப்படவில்லை