gpt4 book ai didi

java - 在 For each 中使用 Lambda 和 Streams 并返回结果

转载 作者:搜寻专家 更新时间:2023-10-31 20:16:38 24 4
gpt4 key购买 nike

我最近一直在学习 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());
}

先谢谢大家了!对不起,如果这是一个愚蠢的问题。

我的图书状态枚举和 getBookStatus:

 public bookStatus getBookStatus() {
return this.bookStatus;
}

public enum bookStatus {
Available,
Reserved,
Borrowed,
Damaged,
Deleted

}

最佳答案

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."));
}

关于java - 在 For each 中使用 Lambda 和 Streams 并返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56162874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com