2015-02-09 2 views
0

Мой код Java выглядит так: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() метод, как мне нужно, чтобы проверить, если каждый из строки внутри типов списка проходит регулярное выражение (isValidLookupTypeOrCode) и одну строку Ланг также проходит регулярное выражение (isValidLang)

Каков наилучший способ проверить 2 условия? так как isValidLang() необходимо проверять только один раз, но isValidLookupTypeOrCode() нужно запускать в каждой строке списка?

ответ

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; 
} 
0

Если вы можете использовать Java 8, то это хороший случай использования для потоков:

if (isValidLang(lang) 
    && types.stream().allMatch(MyClass::isValidLookupTypeOrCode)) { 
    ... 
} 
Смежные вопросы