JavaRush /Java блогы /Random-KK /Жазу циклдарын тоқтатыңыз! Java 8 жинақтарымен жұмыс істе...

Жазу циклдарын тоқтатыңыз! Java 8 жинақтарымен жұмыс істеудің ең жақсы 10 әдісі

Топта жарияланған
Менің ойымша, JavaRush студенттеріне қандай жинақтар және олар не үшін қажет екенін түсіндірудің қажеті жоқ. Дегенмен, 8-ші нұсқа шыққаннан кейін, бұрын 6-7 жол codeты алатын көптеген қарапайым операциялар минимумға дейін жеңілдетілді. Әрі қарай созбай, мұнда сізге көптеген уақыт пен кеңістікті үнемдейтін Java8 Collections Framework ең жақсы 10 техникасы берілген! Жазу циклдарын тоқтатыңыз!  Java 8 - 1 жинақтарымен жұмыс істеудің ең жақсы 10 әдісіБарлығына сәлем, достар! Өздеріңіз білетіндей, әдет – екінші табиғат. Жазуға үйренгендіктен, for (int i = 0; i <......)мен оны мүлдем қайта үйренгім келмейді (әсіресе бұл дизайн өте қарапайым және түсінікті). Дегенмен, ішкі циклдар біз жиі қайталанатын қарапайым операцияларды қайталаймыз, олардың қайталануынан құтылғымыз келеді. Java8 шығарылымымен Oracle бізге көмектесуді шешті. Төменде сізге көп уақыт пен codeты үнемдейтін 10 ең жақсы жинау әдісі берілген.

1. Iterable.forEach(Consumer<? super 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.
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: Джон Толкин
« Java философиясының » авторы сөзсіз тамаша! :)

5. Map.computeIfAbsent(K пернесі, Функция<? супер K, ? V> mappingFunction кеңейтеді)

Әдіс 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 пернесі, 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 defaultValue)

Кілтке сәйкес мәнді қайтарады 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 кеңейтеді)

Мен бұл әдіс сізді қанша code жолын үнемдейтінін есептеуге тырыспадым.
  • MapЕгер кілт сіздікі keyболмаса немесе valueбұл кілт үшін ол тең болса , nullәдіс қосады .Mapkey-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 Жаңа нәрсеге үйрену әрқашан қиын, бірақ бұл өзгерістер шынымен жақсы. Қалай болғанда да, менің codeымның кейбір бөліктері бұрынғыға қарағанда спагеттиге ұқсамайды :) Егер сізге мақала ұнаса және жаңаларын көргіңіз келсе, «Ұнату» түймесін басу арқылы авторды қолдауды ұмытпаңыз немесе жақсырақ, «Лайк» :) Оқуларыңызға сәттілік!
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION