Java检查列表中的多个字符串

时间:2015-02-09 10:27:53

标签: java regex

我的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()吗?

2 个答案:

答案 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)) {
    ...
}