JavaRush /Java Blog /Random-ID /Berhenti menulis siklus! 10 metode terbaik untuk bekerja ...

Berhenti menulis siklus! 10 metode terbaik untuk bekerja dengan koleksi dari Java 8

Dipublikasikan di grup Random-ID
Saya rasa tidak perlu menjelaskan kepada siswa JavaRush apa itu koleksi dan kegunaannya. Namun, setelah rilis versi ke-8, banyak operasi dasar, yang sebelumnya memerlukan 6-7 baris kode, disederhanakan seminimal mungkin. Tanpa basa-basi lagi, berikut adalah 10 teknik Java8 Collections Framework terbaik yang akan menghemat banyak waktu dan ruang! Berhenti menulis siklus!  10 metode terbaik untuk bekerja dengan koleksi dari Java 8 - 1Halo semuanya, teman-teman! Kebiasaan, seperti yang Anda tahu, adalah sifat kedua. Dan karena sudah terbiasa menulis, for (int i = 0; i <......)saya tidak ingin mempelajarinya kembali sama sekali (apalagi karena desain ini cukup sederhana dan mudah dimengerti). Namun, di dalam loop kita sering mengulangi operasi dasar yang sama, yang pengulangannya ingin kita hilangkan. Dengan dirilisnya Java8, Oracle memutuskan untuk membantu kami dalam hal ini. Di bawah ini adalah 10 metode pengumpulan terbaik yang akan menghemat banyak waktu dan kode.

1. Iterable.forEach (tindakan Konsumen<? super T>)

Nama itu berbicara sendiri. Iterasi melalui koleksi yang diteruskan dan jalankan ekspresi lambda actionuntuk setiap elemen.
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(Filter Predikat<?super E>)

Tidak ada yang rumit juga. Metode ini mengulangi koleksi dan menghapus elemen-elemen yang cocok 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 + " "));
Dalam satu baris kami menghapus dari daftar semua angka yang lebih besar dari 5.

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

Metode ini forEachbekerja tidak hanya untuk kelas yang mengimplementasikan antarmuka Collection, tetapi juga untuk 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 kunci,BiFunction<? super K, ? super V, ? extends V> remappingFunction)

Kelihatannya sedikit lebih mengintimidasi, namun kenyataannya sederhana, seperti semua yang sebelumnya. Untuk kunci yang ditentukan key, metode ini menetapkan nilai pada hasil fungsi remappingFunction. Misalnya:
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: Джон Толкин
Penulis " Filsafat Jawa " pastinya keren! :)

5. Map.computeIfAbsent(K kunci, Fungsi<? super K, ? extends V> pemetaanFunction)

Metode ini akan menambahkan elemen baru ke Map , tetapi hanya jika tidak ada elemen dengan kunci yang sama di sana. Hasil valueeksekusi fungsi akan ditugaskan padanya mappingFunction. Jika elemen dengan kunci seperti itu sudah ada, elemen tersebut tidak akan ditimpa, tetapi akan tetap di tempatnya. Mari kembali ke buku kita dan mencoba metode baru:
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));
Fungsi kami mappingFunction:
public static String getHarryPotterAuthor() {
        return "Джоан Роулинг";
    }
Dan inilah buku barunya:
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Гарри Поттер и узник Азкабана. Author: Джоан Роулинг
Название книги: Властелин Колец. Author: Джон Толкин

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

Prinsipnya sama seperti , Map.compute()tetapi semua penghitungan hanya akan dilakukan jika elemen dengan kunci keysudah ada.
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));
Saat pertama kali fungsi tersebut dipanggil, tidak ada perubahan yang terjadi, karena Maptidak ada buku berjudul “Eugene Onegin” di buku kami. Namun untuk kedua kalinya program tersebut mengubah penulis buku “The Brothers Karamazov” menjadi “Alexander Pushkin”. Kesimpulan:
_________________
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин
_________________
Название книги: Братья Карамазовы. Author: Александр Пушкин
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин

7. Map.getOrDefault(Kunci objek, V defaultValue)

Mengembalikan nilai yang sesuai dengan kunci key. Jika kunci tersebut tidak ada, kembalikan nilai default.
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);
Sangat nyaman:
Неизвестный автор

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

Saya bahkan tidak mencoba menghitung berapa banyak baris kode yang dapat dihemat dengan metode ini.
  • MapJika kuncinya keytidak ada pada milik Anda , atau valueuntuk kunci ini sama , nullmaka metode akan menambahkan .Mapkey-value
  • Jika kuncinya Keyada dan ada di sana, value != nullmetode akan mengubahnya valuemenjadi hasil eksekusi fungsi yang diteruskan remappingFunction.
  • Jika remappingFunctionkembali null, keymaka akan dihapus dari koleksi.
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));
Kesimpulan:
Название:Братья Карамазовы. Author: Федор Достоевский
Название:Философия Java. Author: Брюс Эккель и кто-то там еще
Название:Преступление и наказание. Author: Федор Достоевский
Название:Война и мир. Author: Лев Толстой
Название:Властелин Колец. Author: Джон Толкин
*maaf Bruce*

9. Map.putIfAbsent(kunci K, nilai V)

Sebelumnya, untuk menambahkan pasangan, Mapjika tidak ada, Anda harus melakukan hal berikut:
Map <String, String> map = new HashMap<>();
if (map.get("Властелин Колец") == null)
    map.put("Властелин Колец", "Джон Толкин");
Sekarang semuanya menjadi lebih sederhana:
Map<String, String> map = new HashMap<>();
map.putIfAbsent("Властелин Колец", "Джон Толкин");

10. Peta.ganti dan Peta.gantiSemua()

Terakhir dalam daftar, namun tidak kalah pentingnya. Map.replace(K key, V newValue— mengganti nilai kunci keydengan newValue, jika kunci tersebut ada. Jika tidak, tidak akan terjadi apa-apa. Map.replace(K key, V oldValue, V newValue)- melakukan hal yang sama, tetapi hanya jika nilai saat ini keyadalah oldValue. Map.replaceAll(BiFunction<? super K, ? super V, ? extends V> function)— mengganti semua nilai valuedengan hasil eksekusi fungsi function. Misalnya:
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: Джон Толкин
Tidak bekerja! Nilai kunci Brothers Karamazov saat ini adalah Fyodor Dostoevsky, bukan Bruce Eckel, jadi tidak ada yang berubah.
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: Крутой писатель
Mengubah nilai seluruh Peta dengan mudah tanpa konstruksi rumit apa pun! PS Membiasakan diri dengan sesuatu yang baru selalu sulit, tapi perubahan ini sangat bagus. Bagaimanapun, beberapa bagian kode saya sekarang sudah tidak terlalu mirip spageti dibandingkan sebelumnya :) Jika Anda menyukai artikel ini dan ingin melihat artikel baru, jangan lupa untuk mendukung penulis dalam kompetisi dengan mengklik "Suka", atau lebih baik lagi, “Suka” :) Semoga sukses dalam studimu!
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION