JavaRush /Java Blog /Random-TK /Sikl ýazmagy bes ediň! Java 8-den ýygyndylar bilen işleme...

Sikl ýazmagy bes ediň! Java 8-den ýygyndylar bilen işlemek üçin iň oňat 10 usul

Toparda çap edildi
JavaRush okuwçylaryna kolleksiýalaryň nämedigini we näme üçin niýetlenendigini düşündirmegiň zerurlygy ýok diýip pikir edýärin. Şeýle-de bolsa, 8-nji wersiýa çykandan soň, 6-7 setir kod alan köp sanly başlangyç amallar iň az derejede ýönekeýleşdirildi. Mundan başga-da, size tonna wagt we giňişlik tygşytlamaga mümkinçilik berýän iň oňat 10 Java8 Kolleksiýa Çarçuwaly usuly bar! Sikl ýazmagy bes ediň!  Java 8 - 1 kolleksiýalary bilen işlemek üçin iň oňat 10 usulHemmelere salam, dostlar! Bilşiňiz ýaly, endik ikinji tebigat. Writingazmaga öwrenişenimden soň, for (int i = 0; i <......)ony täzeden öwrenmek islämok (esasanam bu dizaýn gaty ýönekeý we düşnükli). Şeýle-de bolsa, içerki aýlawlar, köplenç gutulmak isleýän şol bir başlangyç amallary gaýtalaýarys. Java8 çykmagy bilen, Oracle bu meselede bize kömek etmek kararyna geldi. Aşakda bir tonna wagt we kod tygşytlaýan iň oňat 10 ýygnamak usuly bar.

1. Iterable.forEach (Sarp ediji <? Super T> hereket)

Adyň özi aýdýar. Geçirilen kolleksiýany gaýtalaýar we actionher element üçin lambda aňlatmasyny ýerine ýetirýär.
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> süzgüç)

Hiç hili çylşyrymly zat ýok. Usul ýygyndy arkaly gaýtalanýar we gabat gelýän elementleri aýyrýar 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 + " "));
Bir setirde 5-den uly sanlary sanawdan aýyrýarys.

3. Map.forEach (BiConsumer <? Super K ,? Super V> hereket)

Bu usul forEachdiňe bir interfeýsi amala aşyrýan synplar üçin däl Collection, eýsem-de bolsa işleýär 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 açary, BiFunction <? Super K ,? Super V ,? V> remppingFunction uzadýar)

Birneme gorkuzýan ýaly görünýär, ýöne aslynda öňküleri ýaly ýönekeý. Görkezilen açar üçin keybu usul funksiýanyň netijesine baha berýär remappingFunction. Mysal üçin:
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: Джон Толкин
" Java Philosophy " -iň awtory hökman ajaýyp! :)

5. Map.computeIfAbsent (K düwmesi, funksiýa <? Super K ,? V> kartalaşdyrmak funksiýasyny uzadýar)

Usul Karta täze element goşar , ýöne diňe şol bir açarly element ýok bolsa. Funksiýanyň ýerine ýetirilişiniň netijesi valueoňa berler mappingFunction. Şeýle açary bolan element eýýäm bar bolsa, gaýtadan ýazylmaz, ýerinde galar. Geliň, kitaplarymyza gaýdyp, täze usuly synap göreliň:
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));
Biziň wezipämiz mappingFunction:
public static String getHarryPotterAuthor() {
        return "Джоан Роулинг";
    }
Ine, täze kitap:
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Гарри Поттер и узник Азкабана. Author: Джоан Роулинг
Название книги: Властелин Колец. Author: Джон Толкин

6. Map.computeIfPresent (K düwmesi, BiFunction <? Super K ,? Super V ,? V> remppingFunction uzadýar)

Edil şol bir prinsip, Map.compute()ýöne ähli hasaplamalar diňe açary bolan element bar bolsa ýerine ýetiriler 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));
Funksiýa ilkinji gezek çagyrylanda hiç hili üýtgeşme bolmady, sebäbi Mapbizde “ugewgen Onegin” ady bilen kitap ýok. Emma maksatnama ikinji gezek “Doganlar Karamazow” kitabynyň awtoryny “Aleksandr Puşkin” diýip üýtgetdi. Netije:
_________________
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин
_________________
Название книги: Братья Карамазовы. Author: Александр Пушкин
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин

7. Map.getOrDefault (Obýekt açary, V defaultValue)

Düwmä gabat gelýän bahany görkezýär key. Şeýle açar ýok bolsa, deslapky bahany yzyna berýär.
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);
Örän rahat:
Неизвестный автор

8. Map.merge (K açary, V bahasy, BiFunction <? Super V ,? Super V ,? V> remppingFunction uzadýar)

Bu usulyň sizi näçe setir tygşytlajakdygyny hasaplamaga-da synanyşmadym.
  • MapEger açar sizde keyýok bolsa ýa-da valuebu açar üçin deň bolsa , nullusul goşýar .Mapkey-value
  • Eger açar Keybar bolsa we şol ýerde bolsa, value != nullusul ony valuegeçen funksiýany ýerine ýetirmegiň netijesine üýtgedýär remappingFunction.
  • remappingFunctionYzyna gaýdyp gelse null, keyýygyndydan aýrylýar.
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));
Netije:
Название:Братья Карамазовы. Author: Федор Достоевский
Название:Философия Java. Author: Брюс Эккель и кто-то там еще
Название:Преступление и наказание. Author: Федор Достоевский
Название:Война и мир. Author: Лев Толстой
Название:Властелин Колец. Author: Джон Толкин
* bagyşlaň Brýus *

9. Map.putIfAbsent (K düwmesi, V bahasy)

Ondan öň jübüt goşmak üçin Mapaşakdakylary etmeli bolýardyňyz:
Map <String, String> map = new HashMap<>();
if (map.get("Властелин Колец") == null)
    map.put("Властелин Колец", "Джон Толкин");
Indi hemme zat has ýönekeýleşdi:
Map<String, String> map = new HashMap<>();
map.putIfAbsent("Властелин Колец", "Джон Толкин");

10. Map.replace we Map.replaceAll ()

Sanawda iň soňky, ýöne az däl. - eger şeýle açar bar bolsa, esasy Map.replace(K key, V newValuebahany çalyşýar . Notok bolsa, hiç zat bolmaz. - şol bir zady edýär, ýöne diňe häzirki bahasy bolsa . - ähli bahalary funksiýanyň ýerine ýetirilişiniň netijesi bilen çalyşýar . Mysal üçin: keynewValueMap.replace(K key, V oldValue, V newValue)keyoldValueMap.replaceAll(BiFunction<? super K, ? super V, ? extends V> function)valuefunction
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: Джон Толкин
Işlemedi! Doganlar Karamazow açarynyň häzirki gymmaty Brýus Ekel däl-de, Fýodor Dostoýewskiý, şonuň üçin hiç zat üýtgemedi.
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: Крутой писатель
Çylşyrymly gurluşyklar bolmazdan, tutuş Kartanyň bahalaryny aňsatlyk bilen üýtgetdi! PS Täze bir zada öwrenişmek elmydama kyn, ýöne bu üýtgeşmeler hakykatdanam gowy. Her niçigem bolsa, kodumyň käbir bölekleri indi öňküsinden has az spagetti ýalydyr :) Makalany halasaňyz we täzelerini görmek isleseňiz, "Halamak" düwmesine basyp, awtory ýaryşda goldamagy ýatdan çykarmaň, ýa-da has gowusy, “Halaýan” :) Okuwyňyz bilen üstünlik!
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION