Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何对独特的项目进行分组_Scala - Fatal编程技术网

Scala 如何对独特的项目进行分组

Scala 如何对独特的项目进行分组,scala,Scala,如果我有以下数据: List ( Color("red", "43"), Color("red", "53"), Color("red", "63"), Color("red", "43") ) 如果我在上面执行val myMap:Map[String,List[Color]]=myList.groupBy(u.id),我会得到以下结果: Map( "43" -> List(Color("red", "43"), Color("red", "43"))

如果我有以下数据:

List (
   Color("red", "43"), 
   Color("red", "53"), 
   Color("red", "63"), 
   Color("red", "43")
)
如果我在上面执行
val myMap:Map[String,List[Color]]=myList.groupBy(u.id)
,我会得到以下结果:

Map(
   "43" -> List(Color("red", "43"), Color("red", "43")),
   "53" -> List(Color("red", "53")),
   "63" -> List(Color("red", "63"))
)
如何仅对唯一项执行
groupBy
,而不是上述操作。最终,要做到以下几点:

Map(
   "43" -> List(Color("red", "43")),
   "53" -> List(Color("red", "53")),
   "63" -> List(Color("red", "63"))
)

您可以将组转换为
集合
,以仅获取唯一元素

myList.groupBy(_.id).mapValues(_.toSet)
或者,如Dima所述,如果要将组保留为
列表
使用distinct

myList.groupBy(_.id).mapValues(_.distinct)

您可以将组转换为
集合
,以仅获取唯一元素

myList.groupBy(_.id).mapValues(_.toSet)
或者,如Dima所述,如果要将组保留为
列表
使用distinct

myList.groupBy(_.id).mapValues(_.distinct)

它必须是一个
groupBy
?您的示例非常简单,只需使用
map
val-map:map[String,Color]=list.map(c=>c.id->c)(collection.breakout)
它必须是
groupBy
?您的示例非常简单,只需使用
map
即可解决:
val-map:map[String,Color]=list.map(c=>c.id->c)(collection.breakout)
在我的问题中,我是否可以维护
myMap
的定义,即
map[String,list[Color]
而不是
map[String,Set[Color]]
你的答案会提供哪一个?@Anthony IMHO
集合
类型更能传达唯一性属性。但是,如果出于某些外部原因,您必须匹配类型,只需将其更改为
.mapValues(u.toSet.toList)
,正如@SerGr所说,如果您想确保某个对象只有唯一的元素,那么它必须是
集。或者,如果您确实需要它成为一个
列表
,请使用Serg提供的代码。您不需要转换为set和back来获取不同的元素
.mappValues(u.distinct)
就可以了。如果你稍微改变一下,你的中间集合(垃圾)就会少一些:
myList.distinct.groupBy(u.id)
我可以在我的问题中维护
myMap
的定义吗,它是
Map[String,List[Color]
而不是
Map[String,Set[Color]]
你的答案会提供哪一个?@Anthony IMHO
集合
类型更能传达唯一性属性。但是,如果出于某些外部原因,您必须匹配类型,只需将其更改为
.mapValues(u.toSet.toList)
,正如@SerGr所说,如果您想确保某个对象只有唯一的元素,那么它必须是
集。或者,如果您确实需要它成为一个
列表
,请使用Serg提供的代码。您不需要转换为set和back来获取不同的元素
.mappValues(u.distinct)
就可以了。如果稍微改变一下,中间集合(垃圾)就会减少:
myList.distinct.groupBy(u.id)