如何从scala中的列表中按类型查找项目?
发布时间:2020-12-16 09:06:49 所属栏目:安全 来源:网络整理
导读:说我已定义: sealed trait ValidationResultobject Valid extends ValidationResultcase class Invalid(error:String) extends ValidationResult 然后我有一个包含一些验证结果的列表: val results = List(Valid,Invalid("required username"),Valid) 我想
说我已定义:
sealed trait ValidationResult object Valid extends ValidationResult case class Invalid(error:String) extends ValidationResult 然后我有一个包含一些验证结果的列表: val results = List(Valid,Invalid("required username"),Valid) 我想找到第一个有无效类型的: results.find( ??? ) match { case Some(error) => println("Invalid: " + error) case _ => println("No error") } 你可以看到有一个???在发现中,但我不知道我应该在那里输入什么. 解决方法results.find { case Invalid(_) => true case _ => false } match { case Some(Invalid(error)) => println("Invalid: " + error) case _ => println("No error") } 或者可能: results.collectFirst { case Invalid(error) => error } match { case Some(error) => println("Invalid: " + error) case _ => println("No error") } 不需要,但我会将Valid转换为case对象,以防你想要模式匹配它. 注意:两个版本都返回找到的第一个错误.如果要累积错误,则需要过滤和映射(或折叠). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |