Используя java.util.regex для извлечения подстрок, я обнаружил, что реализую тот же шаблон кода, работая с вызовами:
Pattern p = Pattern.compile(pattern); // can be static final
Matcher m = p.matcher(input);
if (m.find()) { // or m.matches()
foo(m.group(x));
} else {
...
}
Существует ли функциональное расширение или популярная библиотека (guava / apache commons), которая позволяет избежать уродливых ненужных и подверженных ошибкам локальных переменных, например:
Pattern p = Pattern.compile(pattern); // can be static final
p.matchedGroup(input, x) // return Optional<String>
.map(group -> foo(group))
.orElse(...);
, а также поток результатов матчей, таких как:
Pattern p = Pattern.compile(pattern);
p.findMatches(input)
.map((MatchResult mr) -> {
mr.groupsIfPresent(x).map(g -> foo(g)).orElse(...)
})
.findFirst();
Кажется, единственным функциональным дополнением в Java8 было .splitAsStream()
, но это помогает только при попытке разбить совпадения.