【问题标题】:How to use a predicate to filter the multiple POJOs which do not inherit the same interface如何使用谓词过滤多个不继承同一个接口的POJO
【发布时间】:2018-07-13 11:57:42
【问题描述】:

如果我有以下 POJO——图书馆、书籍、作者,该怎么办。在某些时候,我想在图书馆中查询与指定名称或其他关键字匹配的所有书籍和作者,并返回匹配的那些。但问题是 Book 和 Author 没有继承在谓词中使用的相同接口。你能解释一下如何使它在这种情况下工作吗?

【问题讨论】:

  • 你为什么不试试 InstanceOf 关键字? @用户

标签: java


【解决方案1】:

图书馆应用怎么样? 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多