Scala 如何根据每个元素的属性对列表进行分区

Scala 如何根据每个元素的属性对列表进行分区,scala,partitioning,Scala,Partitioning,我有一个关于按每个列表元素的属性划分列表的问题 给定一个List[E]和一个函数f(E:E):Int如何将列表划分为List[E],其中每个元素都是应用f时具有相同值的元素的List[E] 例如,假设类型E表示物理位移,而f测量位移,得到大于或等于零的整数 val ms = List(a, b, c, d, e) f(a) = 1 f(b) = 3 f(c) = 1 f(d) = 4 f(e) = 3 由此产生的分区将是 List(List(a, c), List(b, e), List(d

我有一个关于按每个列表元素的属性划分列表的问题

给定一个
List[E]
和一个函数
f(E:E):Int
如何将列表划分为
List[E]
,其中每个元素都是应用
f
时具有相同值的元素的
List[E]

例如,假设类型
E
表示物理位移,而
f
测量位移,得到大于或等于零的整数

val ms = List(a, b, c, d, e)

f(a) = 1
f(b) = 3
f(c) = 1
f(d) = 4
f(e) = 3
由此产生的分区将是

List(List(a, c), List(b, e), List(d))
此示例显示
f
的值可以包含间隙,但列表列表不应包含任何空列表。

只需将它们分组:

val ms = List(a, b, c, d, e)
ms.groupBy(x => f(x)).values

如果希望列表按函数值排序:

list.groupBy(f).toList.sortBy(_._1).map(_._2)

或者更惯用的用法是:
ms.groupBy(f).values
要使其成为实际列表,必须添加.toList