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

Scala类对象列表顺序未知时如何按类名选择调用打印方法

Scala 随机顺序类实例选择打印解决方案

核心修改逻辑

  • 输入调整:将原有的索引输入改为直接输入类名字符串(A/B/C),不依赖列表排序规则
  • 实例匹配:通过集合的collectFirst方法结合类型模式匹配,从任意顺序的列表中筛选对应类型的实例
  • 冗余代码清理:删除prtClass方法中无意义的重复实例创建逻辑

完整可运行代码

object printClass {
  class A{
    val a:List[Int] = List(1,2,3,4)
    def printA(): Unit ={
      println("Class A")
      println(a)
    }
  }
  class B{
    val b:List[String] = List("Adam","Ali","Sara","Yara")
    def printB(): Unit ={
      println("Class B")
      println(b)
    }
  }
  class C{
    val c:List[Char] = List('A','S','C','E')
    def printC(): Unit ={
      println("Class C")
      println(c)
    }
  }

  def prtClass(ch:Any): Unit ={
    ch match {
      case a: A => a.printA()
      case b: B => b.printB()
      case c: C => c.printC()
      case _ => print("Class not found")
    }
  }

  def main(args: Array[String]): Unit = {
    val a = new A()
    val b = new B()
    val c = new C()
    // 列表顺序可随意调整,不影响后续选择逻辑
    val listOfObjects = List(c,a,b)
    println("Choose the class to print (A,B,C) : ")
    val choice: String = scala.io.StdIn.readLine().trim

    // 根据输入的类名匹配对应类型的实例
    val targetInstanceOpt = choice match {
      case "A" => listOfObjects.collectFirst { case instance: A => instance }
      case "B" => listOfObjects.collectFirst { case instance: B => instance }
      case "C" => listOfObjects.collectFirst { case instance: C => instance }
      case _ => None
    }

    targetInstanceOpt match {
      case Some(instance) => prtClass(instance)
      case None => println("Class not found")
    }
  }
}

关键逻辑说明

  • collectFirst方法会遍历列表,返回第一个匹配模式的元素,不管列表的排序如何,只要列表中存在对应类型的实例就能正确匹配
  • 如果需要支持匹配列表中所有同类型的实例,可将collectFirst替换为collect,得到所有匹配实例的列表后遍历调用打印方法即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 22:27:03