Карту нужно фильтровать без значений tmst - PullRequest
0 голосов
/ 30 марта 2020

На приведенной ниже карте я должен удалить ключ и значения, если ключ содержит «tmst»

Карта ввода:

{"sun":"test", "row_mod_tmst":"10:05:20", "when" :"yesterday"}

Карта вывода:

{"sun":"test", "when" :"yesterday"}

Я пробовал, как показано ниже, это не работает

 Map<String, Object> withoutTMST = map.entrySet().stream().filter(entry -> (!entry.getKey().endsWith("tmts"))).
                    collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Я бы просто удалил эти записи с карты вместо создания нового объекта карты.

Collection#removeIf - хороший кандидат для этого, примененный к entrySet() карты. .

Что касается условия удаления, я бы использовал contains в сочетании с toLowerCase().

Вот код для этого:

map.entrySet().removeIf(entry -> entry.getKey().toLowerCase().contains("tmst"));

Вход:

{ sun=test, row_mod_tmst=10:05:20, when=yesterday }

Выход:

{ sun=test, when=yesterday }
0 голосов
/ 30 марта 2020

Вы можете использовать регулярное выражение для фильтрации "tmst" значений.

Попробуйте:

Map<String, Object> withoutTMST = map.entrySet().stream().filter(entry -> !entry.getKey().matches(".*((?i)TMST)$")).
        collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

System.out.println(withoutTMST);

Вывод:

{when=yesterday, sun=test}

О регулярном выражении:

  • .* Соответствует любому символу
  • ?i Соответствие без учета регистра
  • $ Конец строки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...