如何使用谓词过滤不继承同一接口的多个POJO

时间:2018-07-12 23:56:55

标签: java

如果我有以下POJO,图书馆,书本,作者,该怎么办?在某个时候,我想查询图书馆中与指定名称或其他关键字匹配的所有书籍和作者,并返回匹配的书籍和作者。但是问题在于Book和Author不能继承谓词中使用的同一接口。您能否说明在这种情况下如何使其工作?

1 个答案:

答案 0 :(得分:0)

图书馆应用怎么样? Library(一个类)将书籍(Book类)存储为List<Book>集合。 Book具有属性(或属性)titleauthorAuthor类具有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);