加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

algorithm – 根据嵌套类型过滤对象列表

发布时间:2020-12-16 10:08:23 所属栏目:安全 来源:网络整理
导读:可以说我有一个课程如下: 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("Harr
可以说我有一个课程如下:

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,List(Person(Bob,List(Person(Jimmy,List(Person(Harry,List()))))),Person(Harry,List()))
  )
Person(
  Jimmy,List()))
  )

或者你可以使它更通用,如下所示:

def dependentAged(age: Int)(person: Person) = person.dependents.exists(_.age == age)
val filtered = pList.filter(dependentAged(11))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读