Pengenalan menggunakan strim:
Penstrukturan pengiraan:
Kesan sampingan:
Contoh 1: Kod dengan kesan sampingan
Map<String, Long> freq = new HashMap<>(); try (Stream<String> words = new Scanner(file).tokens()) { words.forEach(word -> { freq.merge(word.toLowerCase(), 1L, Long::sum); }); }
Masalah: Kod ini menggunakan forEach untuk mengubah suai keadaan luaran (freq). Ia berulang dan tidak mengambil kesempatan daripada strim.
Contoh 2: Kod tanpa kesan sampingan
Map<String, Long> freq; try (Stream<String> words = new Scanner(file).tokens()) { freq = words.collect(Collectors.groupingBy(String::toLowerCase, Collectors.counting())); }
Penyelesaian: Menggunakan Collectors.groupingBy collector untuk mencipta jadual kekerapan tanpa mengubah keadaan luaran. Lebih pendek, lebih jelas dan lebih cekap.
Peruntukan API strim:
Pengumpul:
Contoh 3: Mengekstrak senarai sepuluh perkataan yang paling kerap
List<String> topTen = freq.entrySet().stream() .sorted(Map.Entry.<String, Long>comparingByValue().reversed()) .limit(10) .map(Map.Entry::getKey) .collect(Collectors.toList());
Penjelasan:
Kerumitan API Pengumpul:
Peta dan strategi pengumpulan:
Contoh 4: Menggunakan toMap dengan fungsi gabungan
Map<String, Long> freq; try (Stream<String> words = new Scanner(file).tokens()) { freq = words.collect(Collectors.toMap( String::toLowerCase, word -> 1L, Long::sum )); }
Penjelasan:
Contoh 5: Mengumpulkan album mengikut artis dan mencari album terlaris
Map<Artist, Album> topAlbums = albums.stream() .collect(Collectors.toMap( Album::getArtist, Function.identity(), BinaryOperator.maxBy(Comparator.comparing(Album::sales)) ));
Penjelasan:
Koleksi rentetan:
Pengumpul.menyertai untuk menggabungkan rentetan dengan pembatas pilihan.
Contoh 6: Menggabungkan rentetan dengan pembatas
String result = Stream.of("came", "saw", "conquered") .collect(Collectors.joining(", ", "[", "]"));
Penjelasan:
Kesimpulan:
Atas ialah kandungan terperinci Perkara Beri keutamaan kepada fungsi tanpa kesan sampingan dalam aliran. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!