次のコードは成功しますが、同じことを行うより良い方法はありますか? おそらくケースクラスに特有のものでしょうか?次のコードでは、単純なケース クラスの String 型のフィールドごとに、そのケース クラスのインスタンスのリストを調べて、そのフィールドの最長の文字列の長さを見つけます。
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