case class Person( name:String, age:Int, dependents:List[Person] )
可以说我有以下四个人:
val p1 = Person("Tom",50,List(p2,p4)) val p2 = Person("Bob",20,List(p3)) val p3 = Person("Jimmy",25,List(p4)) val p4 = Person("Harry",11,Nil)
我的人员列表是val pList = List(p1,p2,p3,p4)
我想过滤这个系列,以便让所有11岁的人都有依赖.
什么是一种方法呢?
该算法可以总结为对于pList中每个人(p)的每个依赖(d),如果依赖的年龄(d)是== 11,则收集人(p).
我如何用scala表达它?
记下人员名单,并在其上使用过滤方法,检查每个受抚养人是否包含年龄为11岁的人.pList.filter(_.dependents.exists(_.age == 11))
这显然只会检查1层深,所以在你的例子中,它将返回Tom和Jimmy,因为他们是11岁时唯一直接依赖的人:
Person( Tom, 50, List(Person(Bob,20,List(Person(Jimmy,25,List(Person(Harry,11,List()))))), Person(Harry,11,List())) ) Person( Jimmy, 25, List(Person(Harry,11,List())) )
或者你可以使它更通用,如下所示:
def dependentAged(age: Int)(person: Person) = person.dependents.exists(_.age == age) val filtered = pList.filter(dependentAged(11))
精彩评论