我的Java代码如下所示;
public List<Lookup> findAll(List<String> types, String lang) {
Query query = entityManager.createNamedQuery("Lookup.myQuery");
List<Lookup> result = new ArrayList<Lookup>();
for (String type : types) {
// check if isValidLookupTypeOrCode(type) && isValidLang(lang))
// if yes, do query.setParameter("lookupTypes", types) & query.setParameter("lang", lang);
// result = query.getResultList();
}
return result;
}
private boolean isValidLookupTypeOrCode(String s) {
String pattern = "^[a-zA-Z0-9\\_]*$";
if (s.matches(pattern)) {
return true;
}
return false;
}
private boolean isValidLang(String s) {
String pattern= "[a-zA-Z]{1,3}$";
if (s.matches(pattern)) {
return true;
}
return false;
}
现在我如何更新findAll()方法中的代码,因为我需要检查List类型中的每个字符串是否都通过了正则表达式(isValidLookupTypeOrCode),而单个字符串lang是否也通过了正则表达式(isValidLang)
检查2个条件的最佳方法是什么?因为isValidLang()只需要实际检查一次,但需要在列表的每个字符串上运行isValidLookupTypeOrCode()吗?
答案 0 :(得分:0)
你可以这样做:
public List<Lookup> findAll(List<String> types, String lang) {
List<Lookup> result = new ArrayList<Lookup>();
// validate lang parameter
if (isValidLang(lang)) {
// validate each of the type parameters from list
for (String type : types) {
if ( !isValidLookupTypeOrCode(type) )
return result;
}
// we are here, all good so run the query
Query query = entityManager.createNamedQuery("Lookup.myQuery");
query.setParameter("lookupTypes", types);
query.setParameter("lang", lang);
result = query.getResultList();
}
return result;
}
答案 1 :(得分:0)
如果您能够使用Java 8,那么这是流的一个很好的用例:
if (isValidLang(lang)
&& types.stream().allMatch(MyClass::isValidLookupTypeOrCode)) {
...
}