JavaRush /Blog Java /Random-MS /Berhenti menulis kitaran! 10 kaedah terbaik untuk bekerja...

Berhenti menulis kitaran! 10 kaedah terbaik untuk bekerja dengan koleksi daripada Java 8

Diterbitkan dalam kumpulan
Saya rasa tidak perlu menjelaskan kepada pelajar JavaRush apakah koleksi itu dan untuk kegunaannya. Walau bagaimanapun, selepas keluaran versi ke-8, banyak operasi asas, yang sebelum ini mengambil 6-7 baris kod, dipermudahkan kepada minimum. Tanpa berlengah lagi, berikut ialah 10 teknik Rangka Kerja Koleksi Java8 terbaik yang akan menjimatkan banyak masa dan ruang! Berhenti menulis kitaran!  10 kaedah terbaik untuk bekerja dengan koleksi dari Java 8 - 1Hello semua, kawan-kawan! Tabiat, seperti yang anda tahu, adalah sifat kedua. Dan setelah membiasakan diri menulis, for (int i = 0; i <......)saya tidak mahu mempelajarinya semula (terutamanya kerana reka bentuk ini agak mudah dan boleh difahami). Walau bagaimanapun, dalam gelung kita sering mengulangi operasi asas yang sama, pengulangan yang benar-benar ingin kita singkirkan. Dengan keluaran Java8, Oracle memutuskan untuk membantu kami dengan ini. Di bawah ialah 10 kaedah pengumpulan terbaik yang akan menjimatkan banyak masa dan kod anda.

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

Nama bercakap untuk dirinya sendiri. Mengulangi koleksi yang diluluskan dan melaksanakan ungkapan 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(Predicate<? super E> filter)

Tiada yang rumit juga. Kaedah ini berulang melalui koleksi dan mengalih keluar elemen yang sepadan 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 keluarkan daripada senarai semua nombor yang lebih besar daripada 5.

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

Kaedah ini forEachberfungsi bukan sahaja untuk kelas yang melaksanakan antara muka 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(Kunci K,BiFunction<? super K, ? super V, ? memanjangkan V> remappingFunction)

Ia kelihatan sedikit lebih menakutkan, tetapi pada hakikatnya ia adalah mudah, seperti semua yang sebelumnya. Untuk kunci yang ditentukan key, kaedah ini menetapkan nilai kepada hasil fungsi remappingFunction. Sebagai contoh:
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: Джон Толкин
Pengarang " Java Philosophy " pastinya hebat! :)

5. Map.computeIfAbsent(kunci K, Function<? super K, ? memanjangkan V> mappingFunction)

Kaedah ini akan menambah elemen baharu pada Map , tetapi hanya jika elemen dengan kunci yang sama tiada di sana. Hasil valuedaripada pelaksanaan fungsi akan diberikan kepadanya mappingFunction. Jika elemen dengan kunci sedemikian sudah wujud, ia tidak akan ditimpa, tetapi akan kekal di tempatnya. Mari kembali ke buku kami dan cuba kaedah baharu:
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 baharunya:
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Гарри Поттер и узник Азкабана. Author: Джоан Роулинг
Название книги: Властелин Колец. Author: Джон Толкин

6. Map.computeIfPresent(Kunci K, BiFunction<? super K, ? super V, ? memanjangkan V> remappingFunction)

Prinsip yang sama seperti , Map.compute()tetapi semua pengiraan hanya akan dilakukan jika elemen dengan kunci keysudah wujud.
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));
Apabila fungsi itu dipanggil buat kali pertama, tiada perubahan berlaku, kerana Maptiada buku dengan tajuk "Eugene Onegin" dalam buku kami. Tetapi untuk kali kedua program itu menukar pengarang untuk buku "The Brothers Karamazov" kepada "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 sepadan dengan kunci key. Jika kunci sedemikian tidak wujud, mengembalikan nilai lalai.
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 selesa:
Неизвестный автор

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

Saya tidak cuba mengira berapa banyak baris kod kaedah ini akan menjimatkan anda.
  • MapJika kunci keytidak wujud dalam kekunci anda , atau valueuntuk kunci ini ia adalah sama , nullkaedah itu menambah .Mapkey-value
  • Jika kunci Keywujud dan ia ada di sana, value != nullkaedah menukarnya valuekepada hasil pelaksanaan fungsi yang diluluskan remappingFunction.
  • Jika remappingFunctionia kembali null, keyia dialih keluar daripada 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)

Sebelum ini, untuk menambah pasangan Mapjika tiada, anda perlu melakukan perkara berikut:
Map <String, String> map = new HashMap<>();
if (map.get("Властелин Колец") == null)
    map.put("Властелин Колец", "Джон Толкин");
Sekarang semuanya menjadi lebih mudah:
Map<String, String> map = new HashMap<>();
map.putIfAbsent("Властелин Колец", "Джон Толкин");

10. Map.replace dan Map.replaceAll()

Terakhir dalam senarai, tetapi tidak kurang. Map.replace(K key, V newValue— menggantikan nilai kunci keydengan newValue, jika kunci sedemikian wujud. Jika tidak, tiada apa yang berlaku. Map.replace(K key, V oldValue, V newValue)- melakukan perkara yang sama, tetapi hanya jika nilai semasa keyialah oldValue. Map.replaceAll(BiFunction<? super K, ? super V, ? extends V> function)— menggantikan semua nilai valuedengan hasil pelaksanaan fungsi function. Sebagai contoh:
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 berjaya! Nilai semasa kunci Brothers Karamazov ialah Fyodor Dostoevsky, bukan Bruce Eckel, jadi tiada apa 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: Крутой писатель
Tukar nilai untuk keseluruhan Peta dengan mudah tanpa sebarang pembinaan yang rumit! PS Membiasakan diri dengan sesuatu yang baru sentiasa sukar, tetapi perubahan ini benar-benar bagus. Walau apa pun, beberapa bahagian kod saya kini pasti kurang seperti spageti berbanding sebelum ini :) Jika anda menyukai artikel itu dan ingin melihat yang baharu - jangan lupa untuk menyokong pengarang dalam pertandingan dengan mengklik "Suka" atau, lebih baik lagi, "Suka" :) Semoga berjaya dalam pelajaran!
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION