Я просто натрапив на питання, коли використовував a Listта його stream()метод. Хоча я знаю, як ними користуватися, я не зовсім впевнений, коли ними користуватися.
Наприклад, у мене є список, який містить різні шляхи до різних місць. Тепер я хотів би перевірити, чи містить один заданий шлях будь-який із зазначених у списку шляхів. Я хотів би повернутися на booleanоснові того, чи було виконано умову чи ні.
Це, звичайно, не є складним завданням. Але мені цікаво, чи слід використовувати потоки чи цикл для (-each).
Список
private static final List<String> EXCLUDE_PATHS = Arrays.asList(new String[]{
"my/path/one",
"my/path/two"
});
Приклад - Потік
private boolean isExcluded(String path){
return EXCLUDE_PATHS.stream()
.map(String::toLowerCase)
.filter(path::contains)
.collect(Collectors.toList())
.size() > 0;
}
Приклад - для кожного циклу
private boolean isExcluded(String path){
for (String excludePath : EXCLUDE_PATHS) {
if(path.contains(excludePath.toLowerCase())){
return true;
}
}
return false;
}
Зауважте, що pathпараметр завжди малий .
Перший мій припущення полягає в тому, що підхід для кожного швидше, тому що цикл повернеться негайно, якщо умова буде виконана. Тоді як потік все ще перебиратиме всі записи списку для завершення фільтрації.
Чи правильне моє припущення? Якщо так, то чому (а точніше, коли ) я б stream()тоді користувався?
new String[]{…}. Просто використовуйтеArrays.asList("my/path/one", "my/path/two")
String[], дзвонити не потрібно Arrays.asList. Ви можете просто передати потоковий масив за допомогою Arrays.stream(array). До речі, у мене взагалі є труднощі з розумінням мети isExcludedтесту. Чи справді цікаво, чи елемент EXCLUDE_PATHSбуквально міститься десь у межах шляху? Тобто isExcluded("my/path/one/foo/bar/baz")повернеться true, як і isExcluded("foo/bar/baz/my/path/one/")…
Arrays.streamметод, дякую, що вказав на це. Дійсно, приклад, який я розмістив, здається абсолютно марним для інших, окрім мене. Я знаю про поведінку isExcludedметоду, але це дійсно просто щось, що мені потрібно для себе, таким чином, щоб відповісти на ваше запитання: так , це цікаво з причин, які я хотів би не згадувати, оскільки це не вкладалося б у сферу застосування оригінального питання.
toLowerCaseзастосовується до константи, яка вже є малою? Чи не слід це застосовувати до pathаргументу?