#java #lambda
#java #лямбда
Вопрос:
Я изучаю лямбды, и мне интересно узнать о следующем коде:
ArrayList<String> lines = new ArrayList<>();
lines.add("#ignored");
lines.add(" #ignored2");
lines.add("Not Ignored");
lines.add("also not ignored");
lines.add(" also Not Ignored but lower CASE");
lines.stream()
.filter(line -> !line.trim().startsWith("#"))
.map(line -> line.trim().toLowerCase())
.forEach(System.out::println);
вывод:
not ignored
also not ignored
also not ignored but lower case
Как для строк фильтра, так и для строк карты я вызываю trim(), чтобы удалить все начальные или конечные пробелы.
Возможно ли здесь обрезать строку один раз, сохранить результат, а затем использовать этот результат на карте?
Комментарии:
1. Этот вопрос не показывает каких-либо исследовательских усилий; он неясен или бесполезен. Это ваша причина. Посетите Meta, если хотите получить еще больше информации.
Ответ №1:
Вы можете использовать map
метод в начале, чтобы обрезать строки:
lines.stream()
.map(String::trim) // Trim the spaces
.filter(line -> !line.startsWith("#"))
.map(String::toLowerCase)
.forEach(System.out::println);
Комментарии:
1. вы можете написать
.map(String::trim)
🙂2. то же самое с toLowerCase
3. @maxpovver Спасибо, я изменил ответ, чтобы использовать ссылки на методы.
Ответ №2:
Вы могли бы попробовать ниже
lines.stream().map(String::trim).filter(line -> !line.startsWith("#")).map(String::toLowerCase).forEach(System.out::println);