我有一个HashMaps列表如下。
val listHashMaps = List(Map(1 -> List("one", "A") , Map(2 -> List("two", "B"), Map(3 -> List("three", "C"), Map(4 -> List("four", "D")
我想把这些HashMaps合并成一个单一的HashMap,如下图所示。
Map(1 -> List("one", "A"), 2 -> List("two", "B"), 3 -> List("three", "C", 4 -> List("four", "D")
我已经尝试了
listHashMaps.flatten.ToHashMap,但似乎并不奏效。我读到可以使用catsas中的semigroups来实现,但我似乎想不出如何在List上进行迭代,以便将HashMaps合并成一个单一的HashMaps.我有一个列表,如下所示: val listHashMaps = List(Map(1 -> List("one", "A"" , Map(2 -> List("two")。
val combinedMap = Semigroup[HashMap[Int, List[String]]].combine(aMap, anotherMap)
你可以使用任一使用 NonEmptyList
然后是默认的半群(这将只是连接地图),或者你可以使用不安全的 .reduce
作用于 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)
}