gpt4 book ai didi

list - scala 根据元素类型将列表拆分为子列表

转载 作者:行者123 更新时间:2023-12-02 18:43:08 27 4
gpt4 key购买 nike

如何根据元素类型将列表拆分为子列表?

简而言之,鉴于:

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) )

最佳答案

    drinks.foldRight[List[List[Drink]](List.empty) {
case (next, (l@(last :: _) :: tail) if next.getClass == last.getClass =>
(next :: l)::tail
case (next, rest) => List(next) :: rest
}

如果类型是参数化的,您将需要评论中提到的 TypeTags ...但在这一点上,向类本身添加一个方法确实会更容易...像这样:

    class Drink[T: ClassTag] {
def typeId = s"Drink of ${classTag[T].runtimeClass.getName}"
}

然后您可以只比较这些类型 ID,而不是实际的类。

关于list - scala 根据元素类型将列表拆分为子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67808795/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com