JavaRush /Java-Blog /Random-DE /Hören Sie auf, Zyklen zu schreiben! Die 10 besten Methode...

Hören Sie auf, Zyklen zu schreiben! Die 10 besten Methoden zum Arbeiten mit Sammlungen aus Java 8

Veröffentlicht in der Gruppe Random-DE
Ich denke, es besteht keine Notwendigkeit, JavaRush-Studenten zu erklären, was Sammlungen sind und wozu sie dienen. Nach der Veröffentlichung der 8. Version wurden jedoch viele elementare Operationen, die zuvor 6-7 Codezeilen erforderten, auf ein Minimum vereinfacht. Hier sind ohne weiteres die 10 besten Java8 Collections Framework-Techniken, mit denen Sie jede Menge Zeit und Platz sparen! Hören Sie auf, Zyklen zu schreiben!  Top 10 der besten Methoden für die Arbeit mit Sammlungen von Java 8 - 1Hallo zusammen, Freunde! Wie Sie wissen, ist Gewohnheit eine zweite Natur. Und nachdem ich mich an das Schreiben gewöhnt habe, for (int i = 0; i <......)möchte ich es überhaupt nicht noch einmal lernen (zumal dieses Design recht einfach und verständlich ist). Allerdings wiederholen wir innerhalb von Schleifen oft die gleichen elementaren Operationen, deren Wiederholung wir am liebsten loswerden würden. Mit der Veröffentlichung von Java8 hat Oracle beschlossen, uns dabei zu helfen. Nachfolgend finden Sie die 10 besten Erfassungsmethoden, mit denen Sie eine Menge Zeit und Code sparen.

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

Der Name spricht für sich. Durchläuft die übergebene Sammlung und führt actionfür jedes Element einen Lambda-Ausdruck aus.
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)

Auch nichts Kompliziertes. Die Methode durchläuft die Sammlung und entfernt die Elemente, die übereinstimmen 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 + " "));
In einer Zeile entfernen wir alle Zahlen größer als 5 aus der Liste.

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

Die Methode forEachfunktioniert nicht nur für Klassen, die die Schnittstelle implementieren Collection, sondern auch fü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 + ". Autor: " + b));
Название книги: Братья Карамазовы. Autor: Федор Достоевский
Название книги: Философия Java. Autor: Брюс Эккель
Название книги: Преступление и наказание. Autor: Федор Достоевский
Название книги: Война и мир. Autor: Лев Толстой
Название книги: Властелин Колец. Autor: Джон Толкин

4. Map.compute(K key,BiFunction<? super K, ? super V, ? erweitert V> remappingFunction)

Es sieht etwas einschüchternder aus, aber in Wirklichkeit ist es einfach, wie alle vorherigen. Für den angegebenen Schlüssel keysetzt diese Methode den Wert auf das Ergebnis der Funktion remappingFunction. Zum Beispiel:
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 + ". Autor: " + b));

books.compute("Философия Java", (a,b) -> b+", крутой чувак");
System.out.println("_______________________");
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Autor: " + b));
Название книги: Братья Карамазовы. Autor: Федор Достоевский
Название книги: Философия Java. Autor: Брюс Эккель
Название книги: Преступление и наказание. Autor: Федор Достоевский
Название книги: Война и мир. Autor: Лев Толстой
Название книги: Властелин Колец. Autor: Джон Толкин
_______________________
Название книги: Братья Карамазовы. Autor: Федор Достоевский
Название книги: Философия Java. Autor: Брюс Эккель, крутой чувак
Название книги: Преступление и наказание. Autor: Федор Достоевский
Название книги: Война и мир. Autor: Лев Толстой
Название книги: Властелин Колец. Autor: Джон Толкин
Der Autor von „ Java Philosophy “ ist auf jeden Fall cool! :)

5. Map.computeIfAbsent(K-Taste, Funktion<? super K, ? erweitert V>-MappingFunction)

Die Methode fügt Map ein neues Element hinzu , jedoch nur, wenn dort kein Element mit demselben Schlüssel vorhanden ist. Ihm wird das Ergebnis valueder Funktionsausführung zugewiesen mappingFunction. Existiert bereits ein Element mit einem solchen Schlüssel, wird dieser nicht überschrieben, sondern bleibt bestehen. Kehren wir zu unseren Büchern zurück und probieren eine neue Methode aus:
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 + ". Autor: " + b));
Unsere Funktion mappingFunction:
public static String getHarryPotterAuthor() {
        return "Джоан Роулинг";
    }
Und hier ist das neue Buch:
Название книги: Братья Карамазовы. Autor: Федор Достоевский
Название книги: Философия Java. Autor: Брюс Эккель
Название книги: Преступление и наказание. Autor: Федор Достоевский
Название книги: Война и мир. Autor: Лев Толстой
Название книги: Гарри Поттер и узник Азкабана. Autor: Джоан Роулинг
Название книги: Властелин Колец. Autor: Джон Толкин

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

Gleiches Prinzip wie , Map.compute()aber alle Berechnungen werden nur durchgeführt, wenn das Element mit dem Schlüssel keybereits existiert.
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 + ". Autor: " + b));
books.computeIfPresent("Братья Карамазовы", (a,b) -> b="Александр Пушкин");
System.out.println("_________________");
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Autor: " + b));
Beim ersten Aufruf der Funktion ergaben sich keine Änderungen, da Mapes bei uns kein Buch mit dem Titel „Eugen Onegin“ gibt. Doch zum zweiten Mal wechselte das Programm den Autor des Buches „Die Brüder Karamasow“ zu „Alexander Puschkin“. Abschluss:
_________________
Название книги: Братья Карамазовы. Autor: Федор Достоевский
Название книги: Философия Java. Autor: Брюс Эккель
Название книги: Преступление и наказание. Autor: Федор Достоевский
Название книги: Война и мир. Autor: Лев Толстой
Название книги: Властелин Колец. Autor: Джон Толкин
_________________
Название книги: Братья Карамазовы. Autor: Александр Пушкин
Название книги: Философия Java. Autor: Брюс Эккель
Название книги: Преступление и наказание. Autor: Федор Достоевский
Название книги: Война и мир. Autor: Лев Толстой
Название книги: Властелин Колец. Autor: Джон Толкин

7. Map.getOrDefault(Objektschlüssel, V defaultValue)

Gibt den Wert zurück, der dem Schlüssel entspricht key. Wenn ein solcher Schlüssel nicht vorhanden ist, wird der Standardwert zurückgegeben.
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);
Ganz bequem:
Неизвестный автор

8. Map.merge(K-Taste, V-Wert, BiFunction<? super V, ? super V, ? erweitert V> remappingFunction)

Ich habe nicht einmal versucht zu berechnen, wie viele Codezeilen Sie mit dieser Methode sparen.
  • MapWenn der Schlüssel in Ihrem keynicht existiert oder valuefür diesen Schlüssel gleich ist , nullfügt die Methode hinzu .Mapkey-value
  • Wenn der Schlüssel Keyexistiert und vorhanden ist, value != nulländert die Methode ihn valuein das Ergebnis der Ausführung der übergebenen Funktion remappingFunction.
  • Wenn remappingFunctiones zurückgegeben wird null, keywird es aus der Sammlung entfernt.
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 + ". Autor: " + b));
Abschluss:
Название:Братья Карамазовы. Autor: Федор Достоевский
Название:Философия Java. Autor: Брюс Эккель и кто-то там еще
Название:Преступление и наказание. Autor: Федор Достоевский
Название:Война и мир. Autor: Лев Толстой
Название:Властелин Колец. Autor: Джон Толкин
*tut mir leid, Bruce*

9. Map.putIfAbsent(K-Taste, V-Wert)

Um ein Paar hinzuzufügen, Mapwenn es noch nicht vorhanden war, mussten Sie bisher Folgendes tun:
Map <String, String> map = new HashMap<>();
if (map.get("Властелин Колец") == null)
    map.put("Властелин Колец", "Джон Толкин");
Jetzt ist alles viel einfacher geworden:
Map<String, String> map = new HashMap<>();
map.putIfAbsent("Властелин Колец", "Джон Толкин");

10. Map.replace und Map.replaceAll()

Letzter auf der Liste, aber nicht zuletzt. Map.replace(K key, V newValue– ersetzt den Schlüsselwert keydurch newValue, falls ein solcher Schlüssel vorhanden ist. Wenn nicht, passiert nichts. Map.replace(K key, V oldValue, V newValue)- macht das Gleiche, aber nur, wenn der aktuelle Wert keyist oldValue. Map.replaceAll(BiFunction<? super K, ? super V, ? extends V> function)– ersetzt alle Werte valuedurch das Ergebnis der Funktionsausführung function. Zum Beispiel:
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 + ". Autor: " + b));
Название:Братья Карамазовы. Autor: Федор Достоевский
Название:Философия Java. Autor: Брюс Эккель
Название:Преступление и наказание. Autor: Федор Достоевский
Название:Война и мир. Autor: Лев Толстой
Название:Властелин Колец. Autor: Джон Толкин
Funktioniert nicht! Der aktuelle Wert des Schlüssels der Brüder Karamasow ist Fjodor Dostojewski, nicht Bruce Eckel, daher hat sich nichts geändert.
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 + ". Autor: " + b));
public static String getCoolWriter() {
        return "Крутой писатель";
    }
Название:Братья Карамазовы. Autor: Крутой писатель
Название:Философия Java. Autor: Крутой писатель
Название:Преступление и наказание. Autor: Крутой писатель
Название:Война и мир. Autor: Крутой писатель
Название:Властелин Колец. Autor: Крутой писатель
Ändern Sie ganz einfach die Werte für die gesamte Karte ohne komplexe Konstruktionen! PS: Es ist immer schwierig, sich an etwas Neues zu gewöhnen, aber diese Veränderungen sind wirklich gut. Auf jeden Fall sind einige Teile meines Codes jetzt definitiv weniger spaghettiartig als zuvor :) Wenn Ihnen der Artikel gefallen hat und Sie gerne neue sehen möchten, vergessen Sie nicht, den Autor beim Wettbewerb zu unterstützen, indem Sie auf „Gefällt mir“ oder klicken Besser noch: „Gefällt mir“ :) Viel Glück beim Lernen!
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION