以下代码是有效的,但是否有更好的方法来完成相同的事情?也许是一些特定于 case classes 的东西?在以下代码中,对于我简单的 case class 中的每个 String 类型的字段,该代码会遍历我的该 case class 实例列表,并找到该字段最长字符串的长度。
case class CrmContractorRow(
id: Long,
bankCharges: String,
overTime: String,
name$id: Long,
mgmtFee: String,
contractDetails$id: Long,
email: String,
copyOfVisa: String)
object Go {
def main(args: Array[String]) {
val a = CrmContractorRow(1,"1","1",4444,"1",1,"1","1")
val b = CrmContractorRow(22,"22","22",22,"55555",22,"nine long","22")
val c = CrmContractorRow(333,"333","333",333,"333",333,"333","333")
val rows = List(a,b,c)
c.getClass.getDeclaredFields.filter(p => p.getType == classOf[String]).foreach{f =>
f.setAccessible(true)
println(f.getName + ": " + rows.map(row => f.get(row).asInstanceOf[String]).maxBy(_.length))
}
}
}
结果:
bankCharges: 3
overTime: 3
mgmtFee: 5
email: 9
copyOfVisa: 3