scala – 修改条件为true的列表中的元素
发布时间:2020-12-16 18:34:27 所属栏目:安全 来源:网络整理
导读:case class Person(name: String,age: Int,qualified: Boolean = false)val people: List[Person] = ....val updated: List[Person] = people.map(person = if (person.age = 25) person.copy(qualified=true) else person // unmodified))// Setting every
case class Person(name: String,age: Int,qualified: Boolean = false) val people: List[Person] = .... val updated: List[Person] = people.map(person => if (person.age >= 25) person.copy(qualified=true) else person // unmodified )) // Setting every person above 25 y.o. as qualified 有没有一个组合器/更高阶函数的方法来做到这一点?喜欢: people.updateWhere(_.age >= 25,_.copy(qualified=true)) 这就像条件地图.大多数元素都是未修改的,但满足条件的元素会被修改/“映射”. 解决方法
据我所知,没有这样的东西,虽然你可以通过隐式转换:
implicit class ListOps[A](self: List[A]) extends AnyVal { def updateIf(predicate: A => Boolean,mapper: A => A): List[A] = { self.map(el => if (predicate(el)) mapper(el) else el) } } 测试: @ case class Person(name: String,qualified: Boolean = false) defined class Person @ val people = List(Person("A",3,false),Person("B",35,false)) people: List[Person] = List(Person("A",false)) @ people.updateIf(_.age >= 25,_.copy(qualified=true)) res3: List[Person] = List(Person("A",true)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |