在这个案列里利用Scala的map和fold,模拟进行了一个简单的工资计算。
object FoldExmple {
case class Emplee(
name:String,
title:String,
annualSalary:Double,
taxRate:Double,
inssurancePremiumsPerWeek:Double
)
val employees=List(
Emplee("Buck Trends","CEO",200000,0.25,100.0),
Emplee("Cindy Banks","CFO",170000,0.22,120.0),
Emplee("Buck Trends","Developer",130000,0.20,120.0)
)
def main(args: Array[String]) {
//计算每周工资单:
val netPay=employees map{e=>
val net=(1.0-e.taxRate)*(e.annualSalary/52.0)-e.inssurancePremiumsPerWeek
(e,net)//最后返回的就是map的结果
}
//打印工资单:
println("####paychecks:")
netPay foreach{
case(e,net)=>println(f"${e.name+':'}%-16s ${net}%10.2f")
}
//生成报表
val report=(netPay foldLeft(0.0,0.0,0.0)){
case((totalSalary,totalNet,totalInsurance),(e,net))=> //给参数添加名称
(totalSalary+e.annualSalary/52.0,totalNet+net,totalInsurance+e.inssurancePremiumsPerWeek)//做一个匹配的累加
}
println("\n**Report:")
println(f"Total Salary: ${report._1}%10.2f")
println(f"Total Net: ${report._2}%10.2f")
println(f"Total Insurance: ${report._3}%10.2f")
}
}