В последнее время я изучаю лямбду и потоки, и меня очень рано бросили в глубокий конец.
В настоящее время у меня есть список книг в массиве, пользователь вводит слово, и если слово равно автору или названию книги, вызывается и возвращается toString книг (все атрибуты книги красиво отформатированы). Очень легко без лямбды. Но с лямбдой я просто не могу понять, как заставить все это работать.
Кроме того, с помощью лямбды я должен отфильтровать все книги в массиве, которые имеют статус поврежденных или удаленных.
Дело в том, что я должен возвращать результаты из потока, чтобы в итоге отобразить их в графическом интерфейсе, но, похоже, не могу вернуть любое значение потока.
У меня есть предикат, который попытается сопоставить входные параметры.
Я понятия не имею, правильно это или нет, и я довольно сгорел от попыток.
Мне просто интересно, какие необходимые изменения мне нужно сделать, чтобы это заработало?
public String getBookByTitleOrAuthor(String titleOrAuthor) {
books.stream()
.filter(BookPredicate.matchTitleOrAuthor(titleOrAuthor))
.filter(returnedBook -> returnedBook.getBookStatus() !=
Book.bookStatus.Damaged && returnedBook.getBookStatus() !=
Book.bookStatus.Deleted)
.forEach(returnedBook -> returnedBook.toString());
}
// My predicate
public static Predicate<Book> matchTitleOrAuthor(String titleOrAuthor) {
return b -> titleOrAuthor.equals(b.getTitle()) ||
titleOrAuthor.equals(b.getAuthor());
}
Заранее спасибо, ребята! извините, если это глупый вопрос.
Перечисление статуса моей книги и getBookStatus:
public bookStatus getBookStatus() {
return this.bookStatus;
}
public enum bookStatus {
Available,
Reserved,
Borrowed,
Damaged,
Deleted
}