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

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))

(编辑:李大同)

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

    推荐文章
      热点阅读