You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala中如何对含ListBuffer成员的样例类按ListBuffer元素去重

Scala 样例类按 ListBuffer 字段去重方案

首先你给出的样例类存在两处需要补充的内容:缺少类名、ListBuffer 为泛型集合需要指定元素类型,修正后的示例如下:

import scala.collection.mutable.ListBuffer

// 此处 DemoData 为自定义类名,ListBuffer[String] 可根据实际元素类型替换
case class DemoData(a: String, b: String, c: ListBuffer[String])

以下是两种常用的去重实现方式:

  • **方式1:Scala 2.13+ 版本直接使用 distinctBy
    Scala 2.13 及以上版本的集合内置distinctBy方法可直接指定去重维度,ListBuffer 默认的equals方法会逐元素比对内容,直接按c字段去重即可:
val dataList: List[DemoData] = // 你的样例类实例列表
val deduplicatedList = dataList.distinctBy(_.c)
  • 方式2:低版本 Scala 通用实现
    可通过foldLeft结合Set记录已出现的ListBuffer元素实现去重:
import scala.collection.mutable.Set

val deduplicatedList = dataList.foldLeft((List.empty[DemoData], Set.empty[ListBuffer[String]])) {
  case ((resultList, existedC), currentData) =>
    if (existedC.contains(currentData.c)) {
      (resultList, existedC)
    } else {
      (currentData :: resultList, existedC += currentData.c)
    }
}._1.reverse

说明:两种方案默认保留列表中第一个出现的实例,如需保留最后出现的实例,可先将列表反转后再执行去重逻辑。

内容的提问来源于stack exchange,提问作者Yogesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:36:03