1

我有一个 hashMaps 列表如下:

val listHashMaps = List(Map(1 -> List("one", "A") , Map(2 -> List("two", "B"), Map(3 -> List("three", "C"), Map(4 -> List("four", "D")

我想将这些 HashMap 合并到一个 HashMap 中:

 Map(1 -> List("one", "A"), 2 -> List("two", "B"), 3 -> List("three", "C", 4 -> List("four", "D")

我努力了

listHashMaps.flatten.ToHashMap 但它似乎不起作用。我已经读到可以使用来自猫的半群来做到这一点,如下所示,但我似乎可以弄清楚如何迭代 List 以便将 HashMaps 合并为一个。

val combinedMap = Semigroup[HashMap[Int, List[String]]].combine(aMap, anotherMap)
4

1 回答 1

0

您可以使用 a NonEmptyList,然后使用默认的半组(它只会连接地图),或者您可以使用 unsafe.reduce函数 on List

它不安全的原因是它会在一个空列表上爆炸。例子:

import cats.data.NonEmptyList

import scala.collection.immutable
import cats.implicits._

object Foo extends App {

  val listHashMaps: List[Map[Int, List[String]]] = List(
    Map(1 -> List("one", "A")),
    Map(2 -> List("two", "B")),
    Map(3 -> List("three", "C")),
    Map(4 -> List("four", "D"))
  )

  val one: Map[Int, List[String]] = listHashMaps.reduce(_ ++ _)

  // safe
  val nonEmpty: NonEmptyList[Map[Int, List[String]]] = NonEmptyList.of(
    Map(1 -> List("one", "A")),
    Map(2 -> List("two", "B")),
    Map(3 -> List("three", "C")),
    Map(4 -> List("four", "D"))
  )

  val two: Map[Int, List[String]] = nonEmpty.reduce

  println(one)
  println(two)
}
于 2020-04-28T18:31:16.760 回答