API mengintip aliran 8 Java ()

1. Pengenalan

Java Stream API memperkenalkan kita kepada alternatif yang kuat untuk memproses data.

Dalam tutorial ringkas ini, kita akan memfokuskan pada mengintip () , kaedah yang sering disalahpahami.

2. Contoh Pantas

Mari tangan kita kotor dan cuba gunakan mengintip () . Kami mempunyai aliran nama, dan kami mahu mencetaknya ke konsol.

Oleh kerana mengintip () mengharapkan Pelanggan sebagai satu-satunya hujah, ia kelihatan seperti sesuai, jadi mari mencubanya:

Stream nameStream = Stream.of("Alice", "Bob", "Chuck"); nameStream.peek(System.out::println);

Walau bagaimanapun, coretan di atas tidak menghasilkan output. Untuk memahami sebabnya, mari kita lakukan penyegaran ringkas mengenai aspek kitaran hayat aliran.

3. Operasi Pertengahan vs Terminal

Ingat bahawa aliran mempunyai tiga bahagian: sumber data, operasi perantaraan sifar atau lebih, dan operasi sifar atau satu terminal.

Sumber memberikan elemen ke saluran paip.

Operasi perantaraan mendapatkan elemen satu demi satu dan memprosesnya. Semua operasi perantaraan menjadi malas, dan sebagai akibatnya, tidak ada operasi yang akan memberi kesan sehingga saluran paip mula berfungsi.

Operasi terminal bermaksud akhir kitaran hayat aliran. Yang paling penting untuk senario kami, mereka memulakan kerja dalam perancangan .

4. mengintip () Penggunaan

Alasan mengintip () tidak berfungsi dalam contoh pertama kami adalah bahawa ia adalah operasi perantaraan dan kami tidak menerapkan operasi terminal ke saluran paip. Sebagai alternatif, kita boleh menggunakan forEach () dengan argumen yang sama untuk mendapatkan tingkah laku yang diinginkan:

Stream nameStream = Stream.of("Alice", "Bob", "Chuck"); nameStream.forEach(System.out::println);

halaman Javadoc mengintip () mengatakan: " Kaedah ini ada terutama untuk menyokong debugging, di mana anda ingin melihat elemen ketika mereka melewati titik tertentu dalam perancangan ".

Mari pertimbangkan coretan ini dari halaman Javadoc yang sama:

Stream.of("one", "two", "three", "four") .filter(e -> e.length() > 3) .peek(e -> System.out.println("Filtered value: " + e)) .map(String::toUpperCase) .peek(e -> System.out.println("Mapped value: " + e)) .collect(Collectors.toList());

Ini menunjukkan, bagaimana kita memerhatikan unsur-unsur yang melewati setiap operasi.

Selain itu, mengintip () dapat berguna dalam senario lain: ketika kita ingin mengubah keadaan dalaman elemen . Sebagai contoh, katakan kita mahu menukar semua nama pengguna menjadi huruf kecil sebelum mencetaknya:

Stream userStream = Stream.of(new User("Alice"), new User("Bob"), new User("Chuck")); userStream.peek(u -> u.setName(u.getName().toLowerCase())) .forEach(System.out::println);

Sebagai alternatif, kita mungkin menggunakan peta () , tetapi mengintip () lebih mudah kerana kita tidak ingin mengganti elemen.

5. Kesimpulan

Dalam tutorial ringkas ini, kami melihat ringkasan kitaran hayat aliran untuk memahami bagaimana peek () berfungsi. Kami juga melihat dua kes penggunaan sehari-hari ketika menggunakan mengintip () adalah pilihan yang paling mudah.

Dan seperti biasa, contohnya terdapat di GitHub.