代码之家  ›  专栏  ›  技术社区  ›  Navin Gelot

返回Scala中不带条件的字符串

  •  4
  • Navin Gelot  · 技术社区  · 7 年前

    我有以下变量,我想不带if else条件打印输出

    val students = StudentService.findAllStudents()
    val colleges = StudentService.findAllColleges()
    

    我可以使用以下代码在Scala中打印输出:

      students.map(student => {
        val college: Option[College] = colleges.find(college => college.collegeId == student.collegeId)
        if(college.isDefined)
          s"${student.firstName} ${student.lastName} (${college.get.name} ${college.get.location})"
        else
          s"${student.firstName} ${student.lastName}"
      }).foreach(println)
    

    在定义或不定义大学时,是否有任何方法可以在不使用if-else条件的情况下返回结果?

    2 回复  |  直到 7 年前
        1
  •  3
  •   Branislav Lazic akhouri    7 年前

    你可以用 map 结合 getOrElse :

    students.map(student => 
        colleges.find(_.collegeId == student.collegeId)
                .map(college => s"${student.firstName} ${student.lastName} (${college.get.name} ${college.get.location})")
                .getOrElse(s"${student.firstName} ${student.lastName}")
    ).foreach(println)
    
        2
  •  2
  •   Tim    7 年前

    为了完整起见,这里有一个版本 fold 而不是 map / getOrElse

    students.map(student =>
      s"${student.firstName} ${student.lastName}" +
        colleges.find(_.collegeId == student.collegeId)
          .fold("")(college => s" (${college.name} ${college.location})")
    ).foreach(println)
    
    推荐文章