Saya baru saja menemukan pertanyaan saat menggunakan a List
dan stream()
metodenya. Meskipun saya tahu cara menggunakannya, saya tidak yakin kapan harus menggunakannya.
Misalnya, saya punya daftar, berisi berbagai jalur ke lokasi berbeda. Sekarang, saya ingin memeriksa apakah satu jalur tertentu berisi salah satu jalur yang ditentukan dalam daftar. Saya ingin mengembalikan boolean
berdasarkan apakah kondisi terpenuhi atau tidak.
Ini tentu saja, bukanlah tugas yang sulit. Tapi saya bertanya-tanya apakah saya harus menggunakan stream, atau loop for (-each).
Daftar
private static final List<String> EXCLUDE_PATHS = Arrays.asList(new String[]{
"my/path/one",
"my/path/two"
});
Contoh - Streaming
private boolean isExcluded(String path){
return EXCLUDE_PATHS.stream()
.map(String::toLowerCase)
.filter(path::contains)
.collect(Collectors.toList())
.size() > 0;
}
Contoh - Untuk-Setiap Loop
private boolean isExcluded(String path){
for (String excludePath : EXCLUDE_PATHS) {
if(path.contains(excludePath.toLowerCase())){
return true;
}
}
return false;
}
Perhatikan bahwa path
parameternya selalu huruf kecil .
Tebakan pertama saya adalah pendekatan untuk setiap lebih cepat, karena loop akan segera kembali, jika kondisinya terpenuhi. Sedangkan aliran masih akan mengulang semua entri daftar untuk menyelesaikan pemfilteran.
Apakah asumsi saya benar? Jika ya, mengapa (atau lebih tepatnya kapan ) saya akan menggunakannya stream()
?
new String[]{…}
disini. Cukup gunakanArrays.asList("my/path/one", "my/path/two")
String[]
, tidak perlu menelepon Arrays.asList
. Anda bisa melakukan streaming melalui array menggunakan Arrays.stream(array)
. Ngomong-ngomong, saya kesulitan memahami tujuan isExcluded
tes sama sekali. Sungguh menarik apakah elemen dari EXCLUDE_PATHS
benar-benar terkandung di suatu tempat di dalam jalur? Yaitu isExcluded("my/path/one/foo/bar/baz")
akan kembali true
, serta isExcluded("foo/bar/baz/my/path/one/")
...
Arrays.stream
metodenya, terima kasih telah menunjukkannya. Memang, contoh yang saya posting sepertinya tidak berguna bagi orang lain selain saya. Saya mengetahui perilaku isExcluded
metode ini, tetapi itu benar-benar hanya sesuatu yang saya butuhkan untuk diri saya sendiri, oleh karena itu, untuk menjawab pertanyaan Anda: ya , ini menarik karena alasan yang tidak ingin saya sebutkan, karena tidak sesuai dengan ruang lingkup dari pertanyaan awal.
toLowerCase
diterapkan pada konstanta yang sudah berbentuk huruf kecil? Bukankah seharusnya itu diterapkan pada path
argumen?