A List
ve 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 boolean
karşı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 path
parametre 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, isExcluded
testin amacını tamamen anlamakta güçlük çekiyorum . Bir öğesinin EXCLUDE_PATHS
tam anlamıyla yolun içinde bir yerde bulunup bulunmadığı gerçekten ilginç mi ? Yani isExcluded("my/path/one/foo/bar/baz")
geri dönecek true
ve isExcluded("foo/bar/baz/my/path/one/")
…
Arrays.stream
yö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. isExcluded
Yö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.
toLowerCase
Zaten küçük olan sabite neden uygulanır? Argümana uygulanması gerekmiyor path
mu?