JavaRush /Блоги Java /Random-TG /Навиштани давраҳоро бас кунед! Беҳтарин 10 усули кор бо к...

Навиштани давраҳоро бас кунед! Беҳтарин 10 усули кор бо коллексияҳо аз Java 8

Дар гурӯҳ нашр шудааст
Ман фикр мекунам, ки ба донишҷӯёни JavaRush фаҳмондан лозим нест, ки коллексияҳо чист ва онҳо барои чӣ ҳастанд. Аммо, пас аз нашри versionи 8-ум, бисёр амалиётҳои elementрӣ, ки қаблан 6-7 сатри codeро мегирифтанд, то ҳадди ақал содда карда шуданд. Бе тафсири бештар, инҳоянд беҳтарин 10 усулҳои беҳтарини Java8 Collections Framework, ки ба шумо даҳҳо вақт ва фазоро сарфа мекунанд! Навиштани давраҳоро бас кунед!  Беҳтарин 10 усули кор бо коллексияҳо аз Java 8 - 1Салом ба ҳама, дӯстон! Одат, чунон ки шумо медонед, табиати дуюм аст. Ва чун ба навиштан одат кардаам, for (int i = 0; i <......)ман онро тамоман аз нав омӯзам (хусусан, зеро ин тарҳ хеле содда ва фаҳмо аст). Бо вуҷуди ин, мо дар дохor ҳалқаҳо аксар вақт ҳамон амалҳои elementриро такрор мекунем, ки такрори онҳоро воқеан аз даст додан мехоҳем. Бо нашри Java8, Oracle тасмим гирифт, ки дар ин кор ба мо кӯмак кунад. Дар зер 10 усули беҳтарини ҷамъоварӣ мавҷуданд, ки ба шумо як тонна вақт ва codeро сарфа мекунанд.

1. Iterable.forEach(Амали истеъмолкунанда<? 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(Предикат<? супер 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, ? V> mappingFunction-ро васеъ мекунад)

Усул ба Харита як унсури нав илова мекунад , аммо танҳо агар элемент бо калиди якхела дар он ҷо набошад. Натиҷаи 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(К калиди, 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(Калиди an object, 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(К калиди, арзиши 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(К калиди, арзиши 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