客观化过滤空值

Joa*_*oar 2 google-app-engine objectify google-cloud-datastore

如何使用Objectify 4通过几个参数正确过滤,考虑到其中一些参数可能为空,这意味着我不想过滤那些?示例:请考虑我要过滤以下内容:

      releases = ofy().load().type(Release.class)
                .filter("user.name", searchCriteria.getName())
                .filter("category", searchCriteria.getCategory())
                .filter("city", searchCriteria.getCity()).list();
Run Code Online (Sandbox Code Playgroud)

为了与我上面说的相匹配,我现在有以下代码,每次检查哪些参数都是空的,所以在这种情况下我不会将它们放在过滤器上:

    if (!nameEmpty && !categoryEmpty && !cityEmpty) {
        releases = ofy().load().type(Release.class)
                .filter("user.name", searchCriteria.getName())
                .filter("category", searchCriteria.getCategory())
                .filter("city", searchCriteria.getCity()).list();
    } else if (!nameEmpty && !categoryEmpty) {
        releases = ofy().load().type(Release.class)
                .filter("user.name", searchCriteria.getName())
                .filter("category", searchCriteria.getCategory()).list();
    } else if (!nameEmpty && !cityEmpty) {
        releases = ofy().load().type(Release.class)
                .filter("user.name", searchCriteria.getName())
                .filter("city", searchCriteria.getCity()).list();
    } else if ...

       ...
Run Code Online (Sandbox Code Playgroud)

我怎样才能避免这种糟糕的过滤方式并使用Objectify 4只使用一行(或几行)?

sti*_*ure 5

Query<Release> query = ofy().load().type(Release.class);

if (!nameEmpty)
    query = query.filter("user.name", searchCriteria.getName());

if (!categoryEmpty)
    query = query.filter("category", searchCriteria.getCategory())

if (!cityEmpty)
    query = query.filter("city", searchCriteria.getCity());

releases = query.list();
Run Code Online (Sandbox Code Playgroud)