У меня в настоящее время есть класс
class CompositeKey {
enum Method { POST, GET, PUT, PATCH, DELETE }
private String url;
private Method method;
public CompositeKey(String url, Method method) {
this.url = url;
this.method = method;
}
public CompositeKey(String url, String method) {
this.url = url;
this.method = Method.valueOf(method);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
CompositeKey that = (CompositeKey) o;
return Objects.equals(url, that.url) &&
method == that.method;
}
@Override
public int hashCode() {
return Objects.hash(url, method);
}
}
Он используется в качестве ключа на карте и работает нормально.Для URL и метода я могу создать объект CompositeKey.С помощью объекта я могу узнать, присутствует ли он на карте или нет.Я могу получить значение ключевого объекта, если карта содержит ключевой объект.
Теперь мне нужно расширить класс, чтобы он принимал регулярное выражение URL вместо URL.Я не могу придумать эффективный подход после изменения.
Вот подход:
Для URL мне нужно выяснить, есть ли какое-либо совпадение с регулярным выражением в наборе ключей карты или нет.Если да, получите значение.Проблема заключается в зацикливании совпадения регулярного выражения, которое при использовании времени равно O (N).
Есть ли лучший подход?