A Listve stream()yöntemini kullanırken bir soru ile karşılaştım . Biliyorum iken nasıl bunları kullanmak için, ben pek emin değilim zaman bunları kullanmak.
Örneğin, farklı konumlara giden çeşitli yolları içeren bir listem var. Şimdi, verilen tek bir yolun listede belirtilen yollardan herhangi birini içerip içermediğini kontrol etmek istiyorum. Koşulun booleankarşılanıp karşılanmadığına bağlı olarak bir döndürmek istiyorum .
Bu elbette kendi başına zor bir görev değil. Ama akarsu mu yoksa for (-each) döngüsü mü kullanmalıyım merak ediyorum.
Liste
private static final List<String> EXCLUDE_PATHS = Arrays.asList(new String[]{
"my/path/one",
"my/path/two"
});
Örnek - Akış
private boolean isExcluded(String path){
return EXCLUDE_PATHS.stream()
.map(String::toLowerCase)
.filter(path::contains)
.collect(Collectors.toList())
.size() > 0;
}
Örnek - Her Döngü İçin
private boolean isExcluded(String path){
for (String excludePath : EXCLUDE_PATHS) {
if(path.contains(excludePath.toLowerCase())){
return true;
}
}
return false;
}
Not o pathparametre her zaman olduğu küçük harf .
İlk tahminim, her biri için yaklaşımın daha hızlı olduğu, çünkü koşul karşılanırsa döngü hemen geri dönecektir. Oysa akış, filtrelemeyi tamamlamak için tüm liste girişleri üzerinde döngü yapacaktır.
Varsayımım doğru mu? Öyleyse, neden (veya daha doğrusu ne zaman ) kullanmalıyım stream()?
new String[]{…}yok. Sadece kullanınArrays.asList("my/path/one", "my/path/two")
String[], aramanıza gerek yoktur Arrays.asList. Kullanarak dizi üzerinden yayın yapabilirsiniz Arrays.stream(array). Bu arada, isExcludedtestin amacını tamamen anlamakta güçlük çekiyorum . Bir öğesinin EXCLUDE_PATHStam anlamıyla yolun içinde bir yerde bulunup bulunmadığı gerçekten ilginç mi ? Yani isExcluded("my/path/one/foo/bar/baz")geri dönecek trueve isExcluded("foo/bar/baz/my/path/one/")…
Arrays.streamyöntemin farkında değildim, buna işaret ettiğin için teşekkürler. Nitekim, yayınladığım örnek benden başka kimse için oldukça yararsız görünüyor. isExcludedYöntemin davranışının farkındayım , ama bu gerçekten kendim için ihtiyacım olan bir şey, bu yüzden sorunuzu cevaplamak için: evet , kapsama uymayacağı için bahsetmek istemediğim nedenlerden dolayı ilginç orijinal soru.
toLowerCaseZaten küçük olan sabite neden uygulanır? Argümana uygulanması gerekmiyor pathmu?