Właśnie natknąłem się na pytanie, kiedy używam a Listi jego stream()metody. Chociaż wiem, jak ich używać, nie jestem pewien, kiedy ich używać.
Na przykład mam listę zawierającą różne ścieżki do różnych lokalizacji. Teraz chciałbym sprawdzić, czy pojedyncza podana ścieżka zawiera którąkolwiek ze ścieżek określonych na liście. Chciałbym zwrócićboolean podstawie tego, czy warunek został spełniony.
Oczywiście nie jest to trudne zadanie samo w sobie. Ale zastanawiam się, czy powinienem używać strumieni, czy pętli for (-each).
Lista
private static final List<String> EXCLUDE_PATHS = Arrays.asList(new String[]{
"my/path/one",
"my/path/two"
});
Przykład - Stream
private boolean isExcluded(String path){
return EXCLUDE_PATHS.stream()
.map(String::toLowerCase)
.filter(path::contains)
.collect(Collectors.toList())
.size() > 0;
}
Przykład - pętla For-Each
private boolean isExcluded(String path){
for (String excludePath : EXCLUDE_PATHS) {
if(path.contains(excludePath.toLowerCase())){
return true;
}
}
return false;
}
Zwróć uwagę, że pathparametr jest zawsze pisany małymi literami .
Moje pierwsze przypuszczenie jest takie, że podejście for-each jest szybsze, ponieważ pętla powróci natychmiast, jeśli warunek zostanie spełniony. Podczas gdy strumień nadal będzie przechodził przez wszystkie wpisy na liście, aby zakończyć filtrowanie.
Czy moje założenie jest prawidłowe? Jeśli tak, dlaczego (a raczej kiedy ) miałbym stream()wtedy użyć ?
new String[]{…}. Po prostu użyjArrays.asList("my/path/one", "my/path/two")
String[], nie ma potrzeby dzwonić Arrays.asList. Możesz po prostu przesyłać strumieniowo przez tablicę za pomocą Arrays.stream(array). Nawiasem mówiąc, mam trudności ze zrozumieniem ogólnego celu isExcludedtestu. Czy to naprawdę interesujące, czy element EXCLUDE_PATHSjest dosłownie zawarty gdzieś na ścieżce? To znaczy isExcluded("my/path/one/foo/bar/baz")wrócę true, a także isExcluded("foo/bar/baz/my/path/one/")…
Arrays.streammetody, dzięki za wskazanie tego. Rzeczywiście, przykład, który opublikowałem, wydaje się zupełnie bezużyteczny dla nikogo poza mną. Zdaję sobie sprawę z zachowania isExcludedmetody, ale tak naprawdę jest to coś, czego dla siebie potrzebuję, więc odpowiadając na Twoje pytanie: tak , jest ciekawa z powodów, o których nie chciałbym mówić, bo nie mieściłaby się w zakresie pierwotnego pytania.
toLowerCasestosuje się do stałej, która jest już mała? Czy nie należy go zastosować do pathargumentu?