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

Scala:有一种通用的方法来修剪案例类的所有String字段吗?

发布时间:2020-12-16 18:09:39 所属栏目:安全 来源:网络整理
导读:我需要一种通用的方法(例如某些函数),它接受case类的实例(任何类型)并返回此实例的副本,但带有修剪后的字符串. (最好没有反射) 任何的想法? 解决方法 您可以使用 shapeless执行此操作: import shapeless._import shapeless.ops.hlist._// Trims if passed
我需要一种通用的方法(例如某些函数),它接受case类的实例(任何类型)并返回此实例的副本,但带有修剪后的字符串.

(最好没有反射)

任何的想法?

解决方法

您可以使用 shapeless执行此操作:

import shapeless._
import shapeless.ops.hlist._

// Trims if passed a String value,otherwise returns the value unchanged
object Trimmer extends Poly1 {
  implicit val stringTrim = at[String] { _.trim }
  implicit def noop[T]    = at[T] { identity }
}

// Uses a Generic to transform the instance into an HList,maps over it 
// and convert it back into the case class
def trimCaseClass[C,H <: HList](c: C)
    (implicit g: Generic.Aux[C,H],m: Mapper.Aux[Trimmer.type,H,H]): C = {
  val hlist = g.to(c)
  val trimmed = hlist.map(Trimmer)
  g.from(trimmed)
}

然后:

scala> case class A(s1: String,s2: String,i: Int)
defined class A

scala> val a = A("   1   ","2",3)
a: A = A(   1,2,3)

scala> trimCaseClass(a)
res0: A = A(1,3)

(编辑:李大同)

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

    推荐文章
      热点阅读