Учитывая объект, подобный этому:
Matcher matcher = pattern.matcher(sql);
с использованием примерно так:
Set<String> matches = new HashSet<>();
while (matcher.find()) {
matches.add(matcher.group());
}
Я бы хотел заменить этот цикл while чем-то более объектно-ориентированным, например, так:
new Iterator<String>() {
@Override
public boolean hasNext() {
return matcher.find();
}
@Override
public String next() {
return matcher.group();
}
}
, чтобы я мог легко, например, создать поток матчей, придерживаться использования API-интерфейсов и т. Д.
Дело в том, что я не знаю и не могу найтиболее краткий способ создать этот поток или итератор.Анонимный класс, подобный приведенному выше, слишком многословен на мой вкус.
Я надеялся найти что-то вроде IteratorFactory.from(matcher::find, matcher::group)
или StreamSupport.of(matcher::find, matcher::group)
в jdk, но пока не повезло.Я не сомневаюсь, что библиотеки, такие как Apache Commons или Guava, предоставляют что-то для этого, но, скажем, я не могу их использовать.
Есть ли удобная фабрика для Streams или Iterators, которая принимает комбинированный метод hasNext / next вJDK?