把ListMap中的一个字段添加到另一个字段上并去重
时间: 2024-03-16 17:42:00 浏览: 57
可以使用`groupBy`函数将`ListMap`中的元素按照某个字段进行分组,然后使用`mapValues`函数将每个分组中的元素进行合并,并去重。
例如,假设`ListMap`中的每个元素都包含`name`和`hobby`两个字段,我们可以使用如下的代码将它们合并为一个字段,并去重:
```scala
val listMap = ListMap("person1" -> Map("name" -> "Alice", "hobby" -> "reading"),
"person2" -> Map("name" -> "Bob", "hobby" -> "swimming"),
"person3" -> Map("name" -> "Charlie", "hobby" -> "reading"),
"person4" -> Map("name" -> "David", "hobby" -> "cooking"))
val newListMap = listMap.groupBy(_._2("hobby")).mapValues { group =>
group.map(_._2("name")).distinct.mkString(",")
}
println(newListMap) // Map(reading -> Alice,Charlie, swimming -> Bob, cooking -> David)
```
在上面的代码中,`groupBy`函数将`ListMap`中的元素按照`hobby`字段进行分组,返回一个`Map`对象,其中每个键对应一个分组,值为该分组中的元素列表。然后,`mapValues`函数将每个分组中的元素的`name`字段合并为一个字符串,并去重,最终返回一个新的`Map`对象。
注意,在上面的代码中,我们使用`_._2`来访问`ListMap`中的每个元素的值,其中第一个`_`表示当前元素的键,第二个`_`表示当前元素的值,因为`ListMap`中的元素是一个二元组,第一个元素是键,第二个元素是值。
阅读全文