【发布时间】:2021-08-20 19:54:22
【问题描述】:
如何根据元素类型将列表拆分为子列表?
简而言之,给定:
trait Drink
final case object Coke extends Drink
final case object Pepsi extends Drink
val drinks = List(Coke,Coke,Pepsi,Coke,Pepsi,Pepsi)
我想要:
List( List(Coke,Coke), List(Pepsi), List(Coke), List(Pepsi, Pepsi) )
【问题讨论】:
-
您想要通用的东西,还是对特定类型集的解决方案满意?另外,它们总是案例对象还是也可能有案例类? - 最后,你尝试了什么?
-
@LuisMiguelMejíaSuárez 这组特殊的类型是无关紧要的。真实世界将是案例类。
-
这些案例类将是参数/通用的吗?喜欢
final case class Foo[T](data: T) extends Bar吗?如果是这样,你有List(Foo(1), Foo("3"))这两个应该在同一个组还是在不同的组? -
是的,当然,我只是没有将它们参数化以简化问题
-
那么,由于类型擦除,您的问题基本上无法解决。 - 您有四个选择:1. 简化数据类型,以避免类型擦除 - 2. 仅依赖类测试,这意味着
Foo(1)和Foo("3")将在同一组中 - 3. 使用TypeTags 但这需要创建 List 的人使用其 TypeTag 压缩每个元素。 - 4. 与上一个类似,创建自己的TypeADT 并在创建List时使用Type压缩每个元素。