java中具有多个变量的复杂if/else逻辑

java中具有多个变量的复杂if/else逻辑,java,if-statement,rule-engine,Java,If Statement,Rule Engine,可以有两种类型的组-私有组和公共组。每个组中都可以有成员。我有三个参数id,includePrivate,includePublic要传递到一个方法中,以根据下面的规则返回组。 例如 public List<Group> getListofGroups(String id, Boolean isPrivate, Boolean isPublic){} 您可以使用“null表示不在乎”的范例。比如: private List<Group> groups; publi

可以有两种类型的组-私有组和公共组。每个组中都可以有成员。我有三个参数id,includePrivate,includePublic要传递到一个方法中,以根据下面的规则返回组。 例如

public List<Group> getListofGroups(String id, Boolean isPrivate, Boolean   isPublic){}
您可以使用“null表示不在乎”的范例。比如:

private List<Group> groups;

public List<Group> getGroups(String id, Boolean includePrivate, Boolean includePublic) {
    return groups.stream()
        .filter(g -> id == null || g.getId().equals(id))
        .filter(g -> includePrivate == null || g.isPrivate() == includePrivate)
        .filter(g -> includePublic== null || g.isPublic() == includePublic)
        .collect(Collectors.toList());
}
或者将谓词推迟到调用方,以获得完全灵活的API:

public List<Group> getGroups(Predicate<Group> predicate) {
     return groups.stream().filter(predicate).collect(Collectors.toList());
}
公共列表getGroups(谓词){
返回组.stream().filter(谓词).collect(收集器.toList());
}

类似的内容,其实并不复杂,假设null表示false:

public List list(String id, Boolean includePrivate, Boolean includePublic) {
    boolean inclPrivate = (includePrivate != null && includePrivate);
    boolean inclPublic = (includePublic != null && includePublic);
    List result = new ArrayList();
    if (inclPublic || ! inclPrivate)
        result.addAll(getAllPublic());
    if (inclPrivate && id != null)
        result.addAll(getPrivateMembers(id));
    else if (inclPrivate || ! inclPublic)
        result.addAll(getAllPrivate());
    return result;
}

当然,如果你真的在查询数据库,你可以动态地构建
WHERE
子句,但是因为你没有说….

你问的问题很不清楚,但是看起来并不复杂。你试过把它写成几个if/else语句吗?我现在已经为这个问题添加了一些上下文。此外,这些变量中的每一个都可以为null,这会带来复杂性。@meghasyamsandeepv请更新问题中的代码,使其更具可读性。
id=!null
不是有效的java。我猜你的意思是
id=空
。是@AndyTurner。我现在更正了。布尔变量也可以为空。如何解释?@MeghashyamSandeepV您将参数设置为
布尔
,而不是
布尔
,并检查其值是否为
null
。@MeghashyamSandeepV更新为支持null
布尔
参数。
public List<Group> getGroups(Predicate<Group> predicate) {
     return groups.stream().filter(predicate).collect(Collectors.toList());
}
public List list(String id, Boolean includePrivate, Boolean includePublic) {
    boolean inclPrivate = (includePrivate != null && includePrivate);
    boolean inclPublic = (includePublic != null && includePublic);
    List result = new ArrayList();
    if (inclPublic || ! inclPrivate)
        result.addAll(getAllPublic());
    if (inclPrivate && id != null)
        result.addAll(getPrivateMembers(id));
    else if (inclPrivate || ! inclPublic)
        result.addAll(getAllPrivate());
    return result;
}