【问题标题】:What do I need to change to make Scala 2.13 MultiDict work as a drop-in replacement for 2.12's MultiMap?我需要进行哪些更改才能使 Scala 2.13 MultiDict 作为 2.12 的 MultiMap 的替代品?
【发布时间】:2021-01-21 13:24:04
【问题描述】:

对于 MultiMap。使用那里找到的示例代码,我希望通过简单地替换代码来更新它:

val mm = new HashMap[Int, Set[String]] with MultiMap[Int, String]

val mm2 = new HashMap[Int, Set[String]] with MultiDict[Int, String]

但是我得到了以下错误:

illegal inheritance; 
<$anon: Int => scala.collection.mutable.Set[String] 
with scala.collection.MultiDict[Int,String]> inherits different type instances of trait Iterable:
Iterable[(Int, String)] and Iterable[(Int, scala.collection.mutable.Set[String])]

【问题讨论】:

    标签: scala scala-collections


    【解决方案1】:

    你要做的是:

    1. 实例化一个可变的MultiDict[K, V]
    2. 通过继承自 Growable[(K, V)]Shrinkable[(K, V)] 特征的方法,根据需要在该集合中添加和删除项目。
    3. 当您需要以Map[K, Set[V]] 访问集合时,请在实例上使用sets 方法。

    在以下示例中,md1md2 都是可变的 MultiDict[Int, String] 对象,它们在代码块的末尾是等效的:

    locally {
      import scala.collection.mutable
    
      val md1 = mutable.MultiDict.empty[Int, String]
      md1.addOne(1 -> "one")
      md1.addOne(1 -> "uno")
      md1.addOne(2 -> "two")
      md1.addOne(2 -> "dos")
    
      val md2 = mutable.MultiDict.from[Int, String](
        Seq(1 -> "one", 1 -> "uno", 2 -> "two", 2 -> "dos")
      )
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 2019-07-12
      • 2022-01-03
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多