Java 为集合优化多个or语句
优化以下代码的最佳方法是什么Java 为集合优化多个or语句,java,Java,优化以下代码的最佳方法是什么 protected void saveUserRoles(Set<String> userRoles) { if (userRoles != null && (userRoles.contains(StaticValues.LUMEN_SELECT_USER_ROLE) || userRoles.contains(StaticValues.EASY_SENSE_USER_ROLE)
protected void saveUserRoles(Set<String> userRoles) {
if (userRoles != null && (userRoles.contains(StaticValues.LUMEN_SELECT_USER_ROLE)
|| userRoles.contains(StaticValues.EASY_SENSE_USER_ROLE)
|| userRoles.contains(StaticValues.TLED_USER_ROLE)||userRoles.contains(StaticValues.IR_APP_USER_ROLE))) {
preferences.setUserRoles(userRoles);
}
}
这可能有助于提高可读性:
static final Set<String> ROLES_TO_SAVE = new HashSet<String>() {{
add(StaticValues.LUMEN_SELECT_USER_ROLE);
add(StaticValues.EASY_SENSE_USER_ROLE);
// ...
}}
protected void saveUserRoles(Set<String> userRoles) {
if (userRoles != null && !Collections.disjoint(ROLES_TO_SAVE, userRoles))
preferences.setUserRoles(userRoles);
}
您可以将逻辑提取到具有循环和变量参数的方法中,如
private static boolean containsAny(Set<String> userRoles, String... roles) {
if (userRoles == null || userRoles.isEmpty()) {
return false;
}
for (String role : roles) {
if (userRoles.contains(role)) {
return true;
}
}
return false;
}
那你可以叫它
protected void saveUserRoles(Set<String> userRoles) {
if (containsAny(userRoles, StaticValues.LUMEN_SELECT_USER_ROLE,
StaticValues.EASY_SENSE_USER_ROLE, StaticValues.TLED_USER_ROLE,
StaticValues.IR_APP_USER_ROLE))) {
preferences.setUserRoles(userRoles);
}
}
我建议您只保留一个要测试的值列表或数组:
private static final List USER_ROLES_TO_SAVE = Arrays.asList(
StaticValues.LUMEN_SELECT_USER_ROLE,
StaticValues.EASY_SENSE_USER_ROLE,
StaticValues.TLED_USER_ROLE,
StaticValues.IR_APP_USER_ROLE);
protected void saveUserRoles(Set<String> userRoles) {
if (userRoles == null) {
return;
}
for (String candidate : USER_ROLES_TO_SAVE) {
if (userRoles.contains(candidate)) {
preferences.setUserRoles(userRoles);
return;
}
}
}
现在很容易维护和阅读-至于性能,如果您只想将列表扩展到大约8个条目,那么没有必要尝试想象-如果这成为瓶颈,我会非常惊讶,在这种情况下,考虑到N是多么小,在复杂性方面找到比ON更快的东西不太可能有用。为什么它需要优化?下面的代码可以放在一个开关中,如果角色可以增加,它将增加| |语句的数量。这就是为什么要寻找optimization@Nargis你是说你在努力吗保持代码的可读性,还是担心性能?这些是非常不同的关切。您希望测试多少个角色,以及您的性能基准在这方面有多重要?将静态值也放在一个集合中,并使用集合交集。