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 && Попробуйте [Boolean] не работают вместе, вместо этого удаление 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
}}
}
Нет внутри не существует
В этом случае сообщение об ошибке очень простое. isValidDate возвращает Boolean, но совпадение с шаблоном, похоже, притворяется Try[Boolean]. Такого преобразования не существует, следовательно, ошибка.





Не могли бы вы обернуть его с помощью Try, как показано ниже ..
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))
Вы хотели поставить
matchвне}? Прямо сейчас происходит сопоставление успеха / неудачи внутри предикатаexists, что не кажется правильным.