2014-09-24 77 views
-1

我需要搜索案例分类列表 示例:在下面的示例中,我想知道teamList是否包含name=php或不是。在案例分类列表上搜索

scala> case class Team(name: String, image: String, nMember: BigInt, nYear: BigInt) 
defined class Team 

scala> val teamList=List(Team("scala","s.jpg",58,5),Team("java","cup.jpg",5400,18),Team("php","elephant.jpg",5800,8)) 
teamList: List[Team] = List(Team(scala,s.jpg,58,5), Team(java,cup.jpg,5400,18), Team(php,elephant.jpg,5800,8)) 

回答

7

您可以使用filter操作:

scala> case class Team(name: String, image: String, nMember: BigInt, nYear: BigInt) 
defined class Team 

scala> val teamList=List(Team("scala","s.jpg",58,5),Team("java","cup.jpg",5400,18),Team("php","elephant.jpg",5800,8)) 
teamList: List[Team] = List(Team(scala,s.jpg,58,5), Team(java,cup.jpg,5400,18), Team(php,elephant.jpg,5800,8)) 

scala> teamList.filter(_.name.contains("php")) 
res0: List[Team] = List(Team(php,elephant.jpg,5800,8)) 

如果只是检查这种元素的存在:

scala> teamList.exists(_.name.contains("php")) 
res5: Boolean = true 

对于更复杂的匹配,你绝对可以去case-match模式匹配。

scala> teamList.filter(_ match { case Team("php", _, _, _) => true case _ => false }) 
res2: List[Team] = List(Team(php,elephant.jpg,5800,8)) 
1
scala> teamList.filter(t => t.name == "php") 
res0: List[Team] = List(Team(php,elephant.jpg,5800,8)) 
1

您可以使用函数式编程使一个很好的语法之类的东西:

val teamList=List(Team("scala","s.jpg",58,5),Team("java","cup.jpg",5400,18),Team("php","elephant.jpg",5800,8)) 
teamList.find(_.name == "php") // finds the first element verifying the predicate, if any 
teamList.exists(_.name == "php") // returns true if such element exists, false otherwise 
teamList.filter(_.name == "php") // finds all the elements verifying the predicate 
+0

我可以得到布尔值,它包含或不? – 2014-09-24 13:26:12

+0

是的,我会编辑我的消息以包含该内容。 – Dici 2014-09-24 13:27:07

+2

@GovindSinghNagarkoti:你可以使用'exists'来描述我的答案。 – tuxdna 2014-09-24 13:35:51