JavaRush /Java Blog /Random-TL /Itigil ang pagsusulat ng mga siklo! Nangungunang 10 pinak...

Itigil ang pagsusulat ng mga siklo! Nangungunang 10 pinakamahusay na paraan para sa pagtatrabaho sa mga koleksyon mula sa Java 8

Nai-publish sa grupo
Sa tingin ko hindi na kailangang ipaliwanag sa mga mag-aaral ng JavaRush kung ano ang mga koleksyon at para saan ang mga ito. Gayunpaman, pagkatapos ng paglabas ng ika-8 na bersyon, maraming mga elementarya na operasyon, na dati ay tumagal ng 6-7 na linya ng code, ay pinasimple sa pinakamaliit. Nang walang karagdagang ado, narito ang nangungunang 10 pinakamahusay na diskarte sa Java8 Collections Framework na makakatipid sa iyo ng toneladang oras at espasyo! Itigil ang pagsusulat ng mga siklo!  Nangungunang 10 pinakamahusay na paraan para sa pagtatrabaho sa mga koleksyon mula sa Java 8 - 1Kumusta sa lahat, mga kaibigan! Ang ugali, tulad ng alam mo, ay pangalawang kalikasan. At dahil nasanay na ako sa pagsusulat, for (int i = 0; i <......)ayoko na itong matutunang muli (lalo na dahil medyo simple at naiintindihan ang disenyong ito). Gayunpaman, sa loob ng mga loop ay madalas naming inuulit ang parehong mga operasyon sa elementarya, ang pag-uulit na talagang gusto naming mapupuksa. Sa paglabas ng Java8, nagpasya ang Oracle na tulungan kami dito. Nasa ibaba ang 10 pinakamahusay na paraan ng koleksyon na makakatipid sa iyo ng isang toneladang oras at code.

1. Iterable.forEach(Consumer<? super T> action)

Ang pangalan ay nagsasalita para sa sarili nito. Umuulit sa naipasa na koleksyon at nagpapatupad ng lambda expression actionpara sa bawat elemento.
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)

Wala ring kumplikado. Ang pamamaraan ay umuulit sa koleksyon at inaalis ang mga elementong iyon na tumutugma sa 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 + " "));
Sa isang linya, inaalis namin sa listahan ang lahat ng numerong higit sa 5.

3. Map.forEach(BiConsumer<? super K, ? super V> action)

Ang pamamaraan forEachay gumagana hindi lamang para sa mga klase na nagpapatupad ng interface Collection, ngunit para din sa 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 key,BiFunction<? super K, ? super V, ? extends V> remappingFunction)

Mukhang mas nakakatakot, ngunit sa katotohanan ito ay simple, tulad ng lahat ng nauna. Para sa tinukoy na key key, ang pamamaraang ito ay nagtatakda ng halaga sa resulta ng function remappingFunction. Halimbawa:
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: Джон Толкин
Ang may-akda ng " Java Philosophy " ay talagang cool! :)

5. Map.computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)

Ang pamamaraan ay magdaragdag ng bagong elemento sa Map , ngunit kung wala doon ang elementong may parehong key. Ang resulta valueng pagpapatupad ng function ay itatalaga dito mappingFunction. Kung mayroon nang elementong may ganoong susi, hindi ito ma-overwrite, ngunit mananatili sa lugar. Bumalik tayo sa ating mga aklat at sumubok ng bagong paraan:
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));
Ang aming function mappingFunction:
public static String getHarryPotterAuthor() {
        return "Джоан Роулинг";
    }
At narito ang bagong libro:
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Гарри Поттер и узник Азкабана. Author: Джоан Роулинг
Название книги: Властелин Колец. Author: Джон Толкин

6. Map.computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)

Parehong prinsipyo tulad ng , Map.compute()ngunit ang lahat ng mga kalkulasyon ay isasagawa lamang kung ang elementong may susi ay keyumiiral na.
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));
Noong tinawag ang function sa unang pagkakataon, walang pagbabagong naganap, dahil Mapwalang libro na may pamagat na "Eugene Onegin" sa amin. Ngunit sa pangalawang pagkakataon binago ng programa ang may-akda para sa aklat na "The Brothers Karamazov" sa "Alexander Pushkin". Konklusyon:
_________________
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин
_________________
Название книги: Братья Карамазовы. Author: Александр Пушкин
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин

7. Map.getOrDefault(Object key, V defaultValue)

Ibinabalik ang halaga na naaayon sa key key. Kung walang ganoong key, ibinabalik ang default na halaga.
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);
Napaka komportable:
Неизвестный автор

8. Map.merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction)

Hindi ko man lang sinubukang kalkulahin kung ilang linya ng code ang ililigtas ka ng pamamaraang ito.
  • MapKung ang susi keyay wala sa iyo , o valuepara sa susi na ito ito ay pantay , nullang paraan ay nagdaragdag .Mapkey-value
  • Kung ang susi Keyay umiiral at ito ay, value != nullang pamamaraan ay nagbabago nito valuesa resulta ng pagpapatupad ng naipasa na function remappingFunction.
  • Kung remappingFunctionbabalik ito null, keyaalisin ito sa koleksyon.
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));
Konklusyon:
Название:Братья Карамазовы. Author: Федор Достоевский
Название:Философия Java. Author: Брюс Эккель и кто-то там еще
Название:Преступление и наказание. Author: Федор Достоевский
Название:Война и мир. Author: Лев Толстой
Название:Властелин Колец. Author: Джон Толкин
*sorry Bruce*

9. Map.putIfAbsent(K key, V value)

Dati, para magdagdag ng pares Mapkung wala ito, kailangan mong gawin ang sumusunod:
Map <String, String> map = new HashMap<>();
if (map.get("Властелин Колец") == null)
    map.put("Властелин Колец", "Джон Толкин");
Ngayon ang lahat ay naging mas simple:
Map<String, String> map = new HashMap<>();
map.putIfAbsent("Властелин Колец", "Джон Толкин");

10. Map.replace at Map.replaceAll()

Huli sa listahan, ngunit hindi bababa sa. Map.replace(K key, V newValue— pinapalitan ang key value keyng newValue, kung may ganoong key. Kung hindi, walang mangyayari. Map.replace(K key, V oldValue, V newValue)- ginagawa ang parehong bagay, ngunit kung ang kasalukuyang halaga keyay oldValue. Map.replaceAll(BiFunction<? super K, ? super V, ? extends V> function)— pinapalitan ang lahat ng mga halaga valuesa resulta ng pagpapatupad ng function function. Halimbawa:
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: Джон Толкин
Hindi gumana! Ang kasalukuyang halaga ng susi ng Brothers Karamazov ay si Fyodor Dostoevsky, hindi si Bruce Eckel, kaya walang nagbago.
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: Крутой писатель
Madaling binago ang mga halaga para sa buong Mapa nang walang anumang kumplikadong mga konstruksyon! PS Ang masanay sa isang bagong bagay ay palaging mahirap, ngunit ang mga pagbabagong ito ay talagang maganda. Sa anumang kaso, ang ilang bahagi ng aking code ay tiyak na hindi gaanong mala-spaghetti kaysa dati :) Kung nagustuhan mo ang artikulo at gustong makakita ng mga bago, huwag kalimutang suportahan ang may-akda sa kumpetisyon sa pamamagitan ng pag-click sa "I-like", o better yet, “Like” :) Good luck sa pag-aaral mo!
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION