Какой эффективный и быстрый способ проверить список шаблонов регулярных выражений на hashmap в Java - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть хэш-карта из более чем 1000 ключей.У меня есть список шаблонов регулярных выражений.Я хотел бы знать быстрый и эффективный способ поиска всех ключей, соответствующих всем шаблонам, из хэш-карты для получения пар ключ-значение.

Примеры шаблонов, как показано ниже

/Rows/\d{1,}/Mei/des-id
/Rows/\d{1,}/cona/des-neigr/port-id
/Rows/\d{1,}/cona/des-neigr/receiving

Воткод, который я написал, но я повторяю всю карту для каждого шаблона.

Map<String,String> finalMap = new HashMap<>();

        for(String pattern : patternList){
            Pattern p = Pattern.compile(pattern);
            map.entrySet().stream().filter(entry -> p.matcher(entry.getKey()).matches()).forEach(x -> {
                finalMap.put(x.getKey(),x.getValue().asText());
            });
        }

1 Ответ

1 голос
/ 23 сентября 2019

Насколько я понимаю Ваш код, Вы ищете записи, которые соответствуют хотя бы одному шаблону.Поэтому я бы предложил инвертировать логику - для каждой записи проверять, соответствует ли какой-либо шаблон (применяя предложение @ elliott-frisch) - что-то вроде этого:

List<Pattern> patterns = patternList.stream().map(Pattern::compile).collect(Collectors.toList());
Map<String, String> finalMap = map.entrySet().stream()
        .filter(
                entry -> patterns.stream()
                        .anyMatch(
                                pattern -> pattern.matcher(entry.getKey()).matches()
                        )
        )
        .collect(Collectors.toMap(
                Map.Entry::getKey,
                entry -> entry.getValue().asText()
        ));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...