object RunList { def main(args: Array[String]): Unit = { val words = List("scala", "is", "good") //使用 /: 输出语句 s1= scala is good val s1 = ("" /: words) (_ + " " + _) println("s1=" + s1) //使用foldLeft 输出语句 s2= scala is good val s2=words.( ? ) println("s2=" + s2) }
时间: 2024-03-27 10:38:38 浏览: 14
可以使用 `foldLeft` 方法来实现和 `/:` 相同的效果,具体可以将代码修改为:
```
object RunList {
def main(args: Array[String]): Unit = {
val words = List("scala", "is", "good")
// 使用 /: 输出语句 s1= scala is good
val s1 = ("" /: words) (_ + " " + _)
println("s1=" + s1)
// 使用 foldLeft 输出语句 s2= scala is good
val s2 = words.foldLeft("") (_ + " " + _)
println("s2=" + s2)
}
}
```
其中 `foldLeft` 的第一个参数是初始值,这里使用空字符串 `""`;第二个参数是一个函数,这里使用 `_ + " " + _` 将列表中的字符串拼接起来。这样就可以得到和 `/:` 相同的输出结果 `s2= scala is good`。
相关问题
根据代码功能,补充如下代码 trait Operate3 { //特质 def insert(id: Int): Unit = { println("插入数据 = " + id) } } class OracleDB { //空 } abstract class MySQL3_ { def say() } object MixInDemo01 { def main(args: Array[String]): Unit = { val oracleDB = new OracleDB oracleDB.insert(100) // val mySql_ = new MySQL3_ mySql_.insert(999) mySql_.say() } }
根据代码功能,需要进行如下补充:
1. 在 OracleDB 类中,需要混入 Operate3 特质,以便该类能够调用 insert 方法。
2. MySQL3_ 类是一个抽象类,需要在其子类中完成 insert 方法的具体实现。
下面是补充后的代码:
trait Operate3 { //特质
def insert(id: Int): Unit = {
println("插入数据 = " + id)
}
}
class OracleDB extends Operate3 { //混入 Operate3 特质
//空
}
abstract class MySQL3_ {
def insert(id: Int): Unit //在子类中具体实现
def say(): Unit
}
class MySQLImpl extends MySQL3_ {
override def insert(id: Int): Unit = {
println("MySQL插入数据 = " + id)
}
override def say(): Unit = {
println("MySQL实现的say方法")
}
}
object MixInDemo01 {
def main(args: Array[String]): Unit = {
val oracleDB = new OracleDB
oracleDB.insert(100)
val mySql_ = new MySQLImpl
mySql_.insert(999)
mySql_.say()
}
}
在 main 方法中,首先创建了 OracleDB 的实例对象 oracleDB,然后调用了其 insert 方法,输出了插入数据的信息。
接着创建了 MySQLImpl 的实例对象 mySql_,调用了其 insert 和 say 方法,输出了 MySQL 插入数据和 MySQL 实现的 say 方法的信息。
import org.apache.flink.api.scala._object SumCount { def main(args: Array[String]): Unit = { // 第1步:建立执行环境 val env = ExecutionEnvironment.getExecutionEnvironment // 第2步:创建数据源 val data = env.fromElements( ("classA", 80), ("classA", 85), ("classB", 90), ("classB", 95), ("classB", 92) ) // 第3步:对数据集指定转换操作 val counts = data .groupBy(0) .sum(1) // 第4步:输出结果 counts.print() }} 把数据源改为读取文档数据
可以将第2步中的数据源改为从文档中读取数据,具体代码如下:
```scala
import org.apache.flink.api.scala._
import java.nio.file.Paths
object SumCount {
def main(args: Array[String]): Unit = {
// 第1步:建立执行环境
val env = ExecutionEnvironment.getExecutionEnvironment
// 第2步:创建数据源
val filePath = Paths.get("path/to/file.txt")
val data = env.readTextFile(filePath.toString)
.map { line =>
val Array(className, scoreStr) = line.split(",")
(className, scoreStr.toInt)
}
// 第3步:对数据集指定转换操作
val counts = data
.groupBy(0)
.sum(1)
// 第4步:输出结果
counts.print()
}
}
```
其中,`readTextFile` 方法用于从指定路径读取文本数据,`map` 方法用于将每行数据转换为 `(String, Int)` 的元组格式,第一个元素为班级名称,第二个元素为分数。