Карта Scala: Как добавить новые записи - PullRequest
0 голосов
/ 13 февраля 2019

Я создал свою карту скалы как:

val A:Map[String, String] = Map()

Затем я пытаюсь добавить записи как:

val B = AttributeCodes.map { s =>

    val attributeVal:String = <someString>
    if (!attributeVal.isEmpty)
    {
      A + (s -> attributeVal)
    }
    else
      ()
  }

И после этой части кода я вижу Aвсе еще пустоИ, B имеет тип:

Pattern: B: IndexedSeq[Any]

Мне нужна карта для добавления записей и такая же или другая карта взамен для использования позже в коде.Однако я не могу использовать «вар» для этого.Любое понимание этой проблемы и как решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

В Scala тип Map по умолчанию является неизменным.<Map> + <Tuple> создает новый экземпляр карты с добавленной дополнительной записью.

Существует два способа обойти это:

  1. Использовать scala.collection.mutable.Map вместо:

    val A:immutable.Map[String, String] = immutable.Map()
    
    AttributeCodes.forEach { s =>
      val attributeVal:String = <someString>
      if (!attributeVal.isEmpty){
        A.put(s, attributeVal)
      }
    }
    
  2. Создание в неизменяемой карте с использованием сгиба:

    val A: Map[String,String] = AttributeCodes.foldLeft(Map(), { m, s =>
      val attributeVal:String = <someString>
      if (!attributeVal.isEmpty){
        m + (s -> attributeVal)
      } else {
        m
      }
    }
    
0 голосов
/ 13 февраля 2019

Scala использует неизменность во многих случаях и призывает вас сделать то же самое.

Не создавайте пустую карту, создайте Map[String, String] с .map и .filter

val A = AttributeCodes.map { s =>
      val attributeVal:String = <someString>
      s -> attributeVal
}.toMap.filter(e => !e._1.isEmpty && !e._2.isEmpty)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...