如何编写单行scala代码?
我是Scala的新手,我编写了一段代码,将员工fileempId、姓名、年龄、工资、部门作为输入,并打印出部门和部门中的总工资 这是一个新手代码。如何缩短代码?请帮忙 代码:如何编写单行scala代码?,scala,Scala,我是Scala的新手,我编写了一段代码,将员工fileempId、姓名、年龄、工资、部门作为输入,并打印出部门和部门中的总工资 这是一个新手代码。如何缩短代码?请帮忙 代码: 这并不短得多,但确实采取了更具功能性的方法: import collection.immutable.Map import io.Source object UsingCollectionMaps { def main(args: Array[String]) { println( Source.
这并不短得多,但确实采取了更具功能性的方法:
import collection.immutable.Map
import io.Source
object UsingCollectionMaps {
def main(args: Array[String]) {
println(
Source.fromFile("Employee.txt").getLines()
.foldLeft(Map.empty[String, Long])({
case (totals, line) =>
val fields = line.split(",")
val department = fields(4)
val salary = fields(3).toLong
totals.updated(department,
totals.getOrElse(department, 0L) + salary)
})
)
}
}
这并不短得多,但确实采取了更具功能性的方法:
import collection.immutable.Map
import io.Source
object UsingCollectionMaps {
def main(args: Array[String]) {
println(
Source.fromFile("Employee.txt").getLines()
.foldLeft(Map.empty[String, Long])({
case (totals, line) =>
val fields = line.split(",")
val department = fields(4)
val salary = fields(3).toLong
totals.updated(department,
totals.getOrElse(department, 0L) + salary)
})
)
}
}
您可以使用.groupBy方法创建“部门”->“员工”的映射,然后计算他们的工资总额:
object UsingCollectionMaps {
def main(a:Array[String]){
val filename = "Employee.txt"
val lines = io.Source.fromFile(filename).getLines().toList
val map = employees.map(_.split(","))
.groupBy(_(4)) // Group by the fourth element of the arrays
.mapValues(_.map(_(3).toLong).sum) // Map an employeeList to their salaries and sum them
println(map)
}
}
您可以使用.groupBy方法创建“部门”->“员工”的映射,然后计算他们的工资总额:
object UsingCollectionMaps {
def main(a:Array[String]){
val filename = "Employee.txt"
val lines = io.Source.fromFile(filename).getLines().toList
val map = employees.map(_.split(","))
.groupBy(_(4)) // Group by the fourth element of the arrays
.mapValues(_.map(_(3).toLong).sum) // Map an employeeList to their salaries and sum them
println(map)
}
}
我会尽量避免那些可变的结构,也为了理解这个文件,将它适当地分到一个case类中。 之后,使用groupBy和sum
import scala.io.Source
case class Employee(empId: String, name: String, age: Int,
salary: Long, department: Int)
Source.fromFile("someFile.txt")
.getLines()
.map( _.split(",") )
.map( l => Employee(l(0), l(1), l(2).toInt,
l(3).toLong, l(4).toInt) )
.toSeq
.groupBy( _.department )
.mapValues( _.map( _.salary ).sum )
我会尽量避免那些可变的结构,也为了理解这个文件,将它适当地分到一个case类中。 之后,使用groupBy和sum
import scala.io.Source
case class Employee(empId: String, name: String, age: Int,
salary: Long, department: Int)
Source.fromFile("someFile.txt")
.getLines()
.map( _.split(",") )
.map( l => Employee(l(0), l(1), l(2).toInt,
l(3).toLong, l(4).toInt) )
.toSeq
.groupBy( _.department )
.mapValues( _.map( _.salary ).sum )
上述代码有效。我只是想看看如何缩短它。这是一个例子吗?你可以用分号替换所有的换行符,你有一个单行代码。你确定这就是你想问的吗?上面的代码是有效的。我只是想看看如何缩短它。这是一个例子吗?你可以用分号替换所有的换行符,你有一个单行代码。你确定这就是你想问的吗?从Scala 2.13开始,.groupBy_u.department.mapValues_u.map_u.salary.sum可以被.groupMapReduce_u.department_u.salary_u+替换。从Scala 2.13开始,.groupBy_u.department.mapValues_u.map_u.map_u.salary.sum可以被.groupMapReduce_u.department_u+替换。