У меня есть хэш-карта, состоящая из строки в качестве ключа и списка объектов в качестве значения. Мне нужно извлечь записи, которые имеют определенную строку в качестве ключа из этого списка. Также в списке значений, содержащихся в каждой записи, мне нужны записи, у которых для определенного атрибута установлено значение true.
Я уже разработал рабочее решение с потоками Java. Поскольку этот код используется в критической задаче, касающейся времени выполнения, мне было интересно, нельзя ли было оптимизировать мой код, чтобы сделать его быстрее.
private HashMap<String, List<RewriteBase>> rewriteUrl;
public static class RewriteBase {
@NotNull
private String urlRegex;
@NotNull
private String proxyPres;
private boolean enable;
private boolean insensitive;
}
Map<String, List<RewriteBase>> rewriteBaseList = GetRewriteUrl();
Map<String, List<RewriteBase>> result = rewriteBaseList.entrySet().stream()
.filter(valore -> path.startsWith(valore.getKey()))
.collect(Collectors.toMap(Entry::getKey, p -> p.getValue().stream()
.filter(value -> value.isEnable()).collect(Collectors.toList())));
Источник данных:
rewriteUrl:
'[/urla/urlb/sc]':
-
urlRegex: /prea/sc
proxyPres: /evm
enable: true
insensitive: true
-
urlRegex: header-logo
proxyPres: /evm
enable: false
insensitive: true
'[/urlc/urld/sc/filter]':
-
urlRegex: /utlnot/sc
proxyPres: /evm
enable: true
insensitive: true
Это yml-файл, который отображается в классе RewriteBase и вставляется в HashMap rewriteUrl. Предполагая, что ключом для поиска является "/ urla / urlb / sc", я ожидаю в результате HashMap с "/ urla / urlb / sc" в качестве ключа и в качестве значения списка, содержащего только запись с разрешением, установленным в true , На практике это:
rewriteUrl:
'[/urla/urlb/sc]':
-
urlRegex: /prea/sc
proxyPres: /evm
enable: true
insensitive: true
В настоящее время я получаю правильный результат, но я думаю, что мой код можно улучшить и сделать быстрее.