scala - 在 scala 中使用布尔值尝试 [Boolean]
问题描述
case class Employee(name :String, dept :String, empId:String, startDate:String)
val emp1 = Employee("abc","accounts", "1234","2019-09-28")
val emp2 = Employee("def","HR", "12345","2019-09-29")
val emp3 = Employee("pp","HR", "12346", "2019-09-28")
val emp4 = Employee("xyz","accounts", "12347","2019-09-20")
val list = Seq(emp1, emp2, emp3, emp4)
def isValidDate(date: LocalDateTime, e:
Employee):Boolean={
date.isAfter(LocalDate.parse(e.startDate).atStartOfDay())
}
def isValidName(name: String, e: Employee):Boolean = e.name == name
private def test(name :String, date:String,list:Seq[Employee])={
list.exists(e =>isValidName(name, e)&&isValidDate(LocalDate.parse(date).atStartOfDay(), e))
}
test("abc","2019-09-28", list)
test("xyz","2019-09-28", list)
test("def","2019-09-28", list)
更改为下面的代码会给出错误 Boolean && Try[Boolean] do not work together 相反删除 isValidName 使其工作
def isValidName(name: String, e: Employee):Boolean = e.name == name
private def test(name :String, date:String,list:Seq[Employee])={
list.exists{e =>isValidName(name, e)&&isValidDate(LocalDate.parse(date).atStartOfDay(), e) match{
case Success(x)=> x
case Failure(ex) => throw ex
}}
}
解决方案
你能用下面的尝试包装它吗..
def validateDate(e:Employee) = Try {
isValidDate(LocalDate.parse(date).atStartOfDay(), e)
} match {
case Success(x) => x
case Failure(ex) =>
//handle failure the way you want
throw ex
}
list.exists(e => isValidName(name, e) && validateDate(e))
或者你可以做..
list.exists(e => isValidName(name, e) && Try(isValidDate(LocalDate.parse(date).atStartOfDay(), e)).getOrElse(false))
推荐阅读
- c# - 模拟 HttpMessageHandler 时未调用 SendAsync
- haskell - Haskell 中的“in”关键字有什么作用?
- amazon-web-services - RHEL 实例迁移(提升和转移)到 AWS
- linux - 如何在通过 apache 规则时查看 Web 请求
- regex - 正则表达式分析站点链接
- vb.net - vb 应用程序中的按钮在第一次单击后在循环中每 x 次按下自身
- python - 无法导入 EcoInvent 3.3
- javascript - this 没有 new 关键字
- c++ - 我可以将 void* 转换为 unique_ptr 吗?
- javascript - Node JS 服务器,无法获取 index.html