фильтр scala отображение ключа как строки и значения как набора объектов - PullRequest
0 голосов
/ 19 апреля 2020

Ниже указано filterSetofSource, в котором первые два слова строки являются ключом карты, а последнее слово - значением поля state в классе наблюдения Item. Нам нужно пройти filterSetofSource, и если первые два слова соответствуют ключу карты, а последнее слово соответствует состоянию, то в этом сценарии сохраняются только эти ключ и соответствующее значение Item.

val filterSetofSource = Set("apple of kashmir", "apple of jammu")

val map = Map("apple of" -> Set(Item(
                               location = Some(Map("state" -> "kashmir"))
                            ),Item(
                               location = Some(Map("state" -> "himachal"))
                            )
             )

в приведенном выше сценарии вывод должен быть таким, как показано ниже:

Map("apple of" -> Set(Item(
                           location = Some(Map("state" -> "kashmir"))
                          )
             )
   )

Будучи новичком в Scala Я не могу реализовать логи c, поэтому обращаюсь за помощью.

1 Ответ

3 голосов
/ 19 апреля 2020

Это дает результат, который вы ищете.

val locals = filterSetofSource.map(_.split("\\s+").lift(2))
                              .filter(_.nonEmpty)

val result = map.map { case (k, v) =>
  k -> v.filter(itm => locals(itm.location.map(_("state"))))
}

Это делает два, возможно, опасных, предположения:

  1. 3-е слово (если оно существует) каждого Запись filterSetofSource всегда является частью местоположения.
  2. У Item.location Map всегда есть ключ "state".

Я должен сказать, что это самая нелепая коллекция структур данных, с которой я сталкивался за долгое время.

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