Kesalahan Umum
Hindari kesalahan yang sering terjadi pada Stream: menggunakan kembali stream, efek samping tersembunyi, serta paralel + status yang dapat diubah.
Kesalahan Umum adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 3 pelajaran total.
Pendahuluan
Aliran sangat kuat, tetapi memiliki kelemahan: menggunakan kembali Stream, efek samping tersembunyi, serta mencampur pemrosesan paralel dengan keadaan yang dapat diubah.
Aliran sekali pakai
Stream bersifat sekali pakai: setelah operasi terminal (forEach, collect, reduce), Stream tidak dapat digunakan lagi.
Kode: kesalahan penggunaan ulang
Setelah operasi terminal, Stream telah digunakan; upaya untuk menggunakannya kembali akan memunculkan IllegalStateException.
import java.util.*;import java.util.stream.*;public class Main {
public static void main(String[] args) {
List<Integer> nums = Arrays.asList(1, 2, 3);
Stream<Integer> s = nums.stream();
s.forEach(System.out::println); // terminal
try {
s.forEach(System.out::println); // reuse -> IllegalStateException
} catch (IllegalStateException e) {
System.out.println("Oops: " + e.getMessage());
}
}
}
Efek samping
Hindari efek samping di dalam map/filter (seperti mengubah daftar eksternal). Lebih baik gunakan fungsi murni dan collect() di akhir.
Kode: efek samping vs collect
Mengubah keadaan di dalam alur pemrosesan rentan menimbulkan masalah. Versi collect() lebih jelas dan aman.
import java.util.*;import java.util.stream.*;public class Main {
public static void main(String[] args) {
List<Integer> nums = Arrays.asList(1,2,3);
// Pitfall: mutating external list from map/forEach
List<Integer> out = new ArrayList<>();
nums.stream().map(n -> { out.add(n*n); return n*n; }).forEach(x -> {});
System.out.println("With side effects: " + out);
// Better: use collect to build the result
List<Integer> squares = nums.stream().map(n -> n*n).collect(Collectors.toList());
System.out.println("With collect: " + squares);
}
}
Kode: paralel + keadaan yang dapat diubah
Aliran paralel + wadah yang dapat diubah dapat menyebabkan kondisi balapan. Lebih baik gunakan collect() karena menangani konkurensi.
import java.util.*;public class Main {
public static void main(String[] args) {
List<Integer> nums = java.util.Arrays.asList(1,2,3,4,5);
// Pitfall: adding to a normal ArrayList from parallel pipeline (unsafe)
List<Integer> unsafe = new ArrayList<>();
nums.parallelStream().forEach(n -> unsafe.add(n)); // may be unsafe
System.out.println("Parallel add to ArrayList (unsafe demo): " + unsafe);
// Safer: use built-in collectors
List<Integer> safe = nums.parallelStream().map(n -> n).collect(java.util.stream.Collectors.toList());
System.out.println("Collected safely: " + safe);
}
}
Pemeriksaan kelemahan
Pemeriksaan singkat: Manakah yang merupakan kelemahan Stream yang umum bagi pemula?
Ringkasan
Ringkasan: 1) Stream hanya dapat digunakan sekali. 2) Hindari efek samping dalam alur pemrosesan. 3) Jangan mencampur aliran paralel dengan keadaan yang dapat diubah secara tidak aman.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Kesalahan Umum” gratis?
Ya — teks lengkap “Kesalahan Umum” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 3 pelajaran total.
Apa yang akan aku pelajari di “Kesalahan Umum”?
Hindari kesalahan yang sering terjadi pada Stream: menggunakan kembali stream, efek samping tersembunyi, serta paralel + status yang dapat diubah. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 3.
Berapa lama pelajaran “Kesalahan Umum” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.