java中具有多个变量的复杂if/else逻辑
可以有两种类型的组-私有组和公共组。每个组中都可以有成员。我有三个参数id,includePrivate,includePublic要传递到一个方法中,以根据下面的规则返回组。 例如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
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;
}