如果我有以下POJO,图书馆,书本,作者,该怎么办?在某个时候,我想查询图书馆中与指定名称或其他关键字匹配的所有书籍和作者,并返回匹配的书籍和作者。但是问题在于Book和Author不能继承谓词中使用的同一接口。您能否说明在这种情况下如何使其工作?
答案 0 :(得分:0)
图书馆应用怎么样? Library
(一个类)将书籍(Book
类)存储为List<Book>
集合。 Book
具有属性(或属性)title
和author
(Author
类具有name
属性)。
要搜索图书馆中的书籍,可以定义多个谓词(类型为java.util.function.Predicate
);例如,通过title
在图书馆中搜索图书的谓词可能类似于:
Predicate<Book> titleMatch = book -> book.getTitle().contains(searchBookTitle);
其中searchBookTitle
是提供的搜索字符串。
因此,通过应用谓词的搜索条件(按标题搜索,如上面的示例谓词),过滤库的books
集合并打印匹配的书。
books.stream()
.filter(titleMatch)
.forEach(System.out::println);
可能会定义更多谓词(并根据需要应用),以下是一些谓词:
Predicate<Book> authorMatch = b -> b.getAuthor().getName().contains(inAuthorName);
Predicate<Book> bookAndAuthorMatch = bookMatch.and(authorMatch);
Predicate<Book> bookOrAutherMatch = bookMatch.or(authorMatch);