Практика на лямбды в Java
Сервис статей хранит заголовки в массиве и умеет обрабатывать их перед выводом. Сначала объявим хранилище:
class ArticleTitles {
private final String[] items = {
"api", "java", "draft post", "go"
};
String[] items() {
return items;
}
}
Метод отбора по предикату возвращает новый массив подходящих строк:
import java.util.function.Predicate;
class ArticleTitles {
String[] filter(Predicate<String> rule) {
int kept = 0;
for (String item : items) {
if (rule.test(item)) {
kept++;
}
}
String[] out = new String[kept];
int index = 0;
for (String item : items) {
if (rule.test(item)) {
out[index++] = item;
}
}
return out;
}
}
Метод печати принимает потребитель и вызывает его для каждого заголовка:
import java.util.function.Consumer;
class ArticleTitles {
void printEach(Consumer<String> action) {
for (String item : items) {
action.accept(item);
}
}
}
В main свяжем правила и действия:
import java.util.function.Predicate;
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
ArticleTitles store = new ArticleTitles();
Predicate<String> longEnough = t -> t.length() >= 4;
String[] picked = store.filter(longEnough);
System.out.println(picked.length);
store.printEach(title ->
System.out.println("> " + title)
);
}
}
Добавьте предикат startsWithJ и выведите
число элементов после filter.
Сделайте метод mapFirst, который возвращает
копию массива с преобразованным первым элементом.
Проверьте на массиве из одной строки "api"
с преобразованием строки в верхний регистр.