Ваш фрагмент кода не предоставляет достаточной информации, чтобы предложить упрощение. Если мы предположим, что существует много этих пар шаблонов и сообщений об ошибках, упрощения возможны, если вы подготовите Map
для этих пар, например.
Map<String,String> regex2message=new HashMap<>();
regex2message.put("regex1", "error message1");
regex2message.put("regex2", "error message2");
regex2message.put("regex3", "error message3");
regex2message.put("regex4", "error message4");
regex2message.put("regex5", "error message5");
как только вы подготовили эту карту, вы можете использовать его как
List<String> errors = new ArrayList<String>();
String val = obj.getValue();
if(val!=null && !val.isEmpty()) {
regex2message.forEach((regex,message)->{ if(!val.matches(regex)) errors.add(message); });
или с помощью Stream
API:
List<String> errors = regex2message.entrySet().stream()
.flatMap(e->val.matches(e.getKey())? null: Stream.of(e.getValue()))
.collect(Collectors.toList());
Имея такую карту также предлагает более глубокую подготовку для более эффективного выполнения операции фактического совпадения, т. е. если мы выполним компиляцию регулярного выражения String
s в Pattern
случаи, как стадия подготовки:
Map<Pattern,String> pattern2message=regex2message.entrySet().stream()
.collect(Collectors.toMap(e->Pattern.compile(e.getKey()), Map.Entry::getValue));
мы можем использовать эту карту позже на этом пути:
List<String> errors = pattern2message.entrySet().stream()
.flatMap(e->e.getKey().matcher(val).matches()? null: Stream.of(e.getValue()))
.collect(Collectors.toList());
Вы можете написать 'нового ArrayList <>();'. Кроме этого, ничего не приходит в голову. – Nitram
Здесь Лэмбда не поможет. Правильная система проверки, с другой стороны ... – Kayaman
Возможно, вы могли бы рассказать нам, что этот код должен делать вообще .. – user2336315