awy*_*ah2 5 java foreach lambda java-stream
我最近一直在学习lambda和流,并且真的很早就投入了深渊。
我目前有一个书的数组列表,用户输入一个单词,如果该单词等于书的作者或书名,则调用书toString(该书的所有属性格式正确)并返回。没有lambda非常容易。但是对于lambda,我似乎无法弄清楚如何解决所有问题。
另外,对于lambda,我必须过滤出阵列中状态为已损坏或已删除的所有书籍。
事情是我必须从流返回结果以最终显示在gui中,但似乎无法返回流的任何值。
我有一个谓词,它将尝试进行输入参数的匹配。我不知道这是否正确,我非常努力地尝试。
我只是想知道我需要进行必要的更改才能使其正常工作吗?
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());
}
Run Code Online (Sandbox Code Playgroud)
在此先感谢大家!抱歉,如果这是一个愚蠢的问题。
我的图书状态枚举和getBookStatus:
public bookStatus getBookStatus() {
return this.bookStatus;
}
public enum bookStatus {
Available,
Reserved,
Borrowed,
Damaged,
Deleted
}
Run Code Online (Sandbox Code Playgroud)
forEach返回,void而你需要一个String. 但我不会去String。该方法表示“我按标题或作者返回一本书”,因此用户会期望一个Book实例。
public Book getBookByTitleOrAuthor(String titleOrAuthor) {
return books.stream()
.filter(BookPredicate.matchTitleOrAuthor(titleOrAuthor))
.filter(b -> {
final Book.bookStatus status = b.getBookStatus();
return status != null &&
status != Book.bookStatus.Damaged &&
status != Book.bookStatus.Deleted;
}) // can be moved into a BookPredicate method as well
.findAny()
.orElseThrow(() -> new IllegalArgumentException("There is no book for the given author or title."));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |