重庆做网站开发的集中,华为邮箱登录入口,石家庄电商网站,东莞厚街网站建设在之前的文章中#xff0c;我们学习了如何在scala中定义与使用集合和元组。想了解的朋友可以查看这篇文章。同时#xff0c;希望我的文章能帮助到你#xff0c;如果觉得我的文章写的不错#xff0c;请留下你宝贵的点赞#xff0c;谢谢。
Spark-Scala语言实战#xff08;…在之前的文章中我们学习了如何在scala中定义与使用集合和元组。想了解的朋友可以查看这篇文章。同时希望我的文章能帮助到你如果觉得我的文章写的不错请留下你宝贵的点赞谢谢。
Spark-Scala语言实战4-CSDN博客https://blog.csdn.net/qq_49513817/article/details/136881756?spm1001.2014.3001.5501
目录 一、知识回顾
二、Scala类与对象
1.类Class和对象Object
Person类
PersonApp对象
2.构造器Constructor
PersonApp对象
局部类Person
对象创建和方法调用
3.伴生对象Companion Objects
三、例题演练 1、定义一个高阶函数
2、定义一个高阶函数
3、对数据中的元素按照指定规则进行分组
4、根据指定规则对数组所有元素聚合
拓展-类和对象 一、知识回顾 在上一篇函数中我们学习了集合创建集合的方法有三种分别是List、Set和map 而我们的元组则不需要用特殊的关键字可以直接创建 现在开始今天的学习吧
二、Scala类与对象
1.类Class和对象Object 类定义了对象的属性和方法。在Scala中我们可以使用class关键字来定义一个类。而对象是类的实例我们可以使用new关键字来创建类的对象。
例
package com.tipdm.scalaDemoobject PersonApp {def main(args: Array[String]): Unit {// 创建Person对象val peng new Person// 设置属性peng.name pengpeng.age 18// 调用方法peng.introduce() // 应该输出: Hello, my name is peng and I am 18 years old.}
}class Person {var name: String _var age: Int _def introduce(): Unit {println(sHello, my name is $name and I am $age years old.)}
}
在我的代码中我运用到了 Person类 定义了一个名为Person的类。类中有两个变量属性name表示人的名字和age表示人的年龄。这两个变量都被初始化为占位符_表示它们可以在创建对象后被赋予具体的值。类中定义了一个方法introduce这个方法没有参数返回类型为Unit相当于Java中的void。当调用这个方法时它会打印出一条包含name和age属性值的问候信息。 PersonApp对象 定义了一个名为PersonApp的单例对象。在Scala中单例对象类似于Java中的静态类或单例类用于包含程序的入口点或其他共享功能。PersonApp对象中包含一个main方法这是Scala应用程序的入口点。当你运行Scala程序时JVM会调用这个main方法开始执行程序。在main方法中首先创建了一个Person类的实例peng。然后通过peng对象设置了name属性为peng和age属性为18。最后调用了peng对象的introduce方法该方法会打印出一条问候信息内容应该是“Hello, my name is peng and I am 18 years old.”。
看一下输出吧 2.构造器Constructor Scala的类可以有一个或多个构造器它们用于初始化对象的属性。在Scala中主构造器的参数直接定义在类定义中而辅助构造器使用this关键字来调用。
package com.tipdm.scalaDemoobject PersonApp {def main(args: Array[String]): Unit {class Person(val name: String, val age: Int) {def introduce(): Unit {println(sHello, my name is $name and I am $age years old.)}}val bob new Person(peng, 18)bob.introduce() // 输出: Hello, my name is peng and I am 18 years old.}
}在以上代码中我的方法是 PersonApp对象 定义了一个名为PersonApp的单例对象它是程序的入口点。在PersonApp对象内部定义了main方法这是Scala应用程序的入口点。 局部类Person 在main方法内部定义了一个局部类Person。这个类接受两个参数name表示人的名字和age表示人的年龄。这两个参数被声明为val意味着它们是不可变的并且在对象创建时就需要被初始化。类中定义了一个方法introduce用于打印出一条包含name和age属性值的问候信息。 对象创建和方法调用 在main方法中创建了一个Person类的实例bob并传入了名字peng和年龄18作为构造参数。接着调用了bob对象的introduce方法该方法会打印出一条问候信息。 3.伴生对象Companion Objects 在Scala中每个类都有一个与之关联的伴生对象。这个对象与类共享相同的名称并且它的定义位于类定义的外部。伴生对象可以包含静态方法或字段这些方法和字段可以通过类名直接访问。
package com.tipdm.scalaDemoobject PersonApp {object PersonUtils {def greet(name: String): Unit {println(sHello, $name!)}}class Person(val name: String) {def introduce(): Unit {println(sMy name is $name.)}}
}object Main {def main(args: Array[String]): Unit {PersonApp.PersonUtils.greet(peng) //val charlie new PersonApp.Person(peng)charlie.introduce()}
}看下输出 三、例题演练 1、定义一个高阶函数
按照指定的规则对集合里面的每个元素进行操作 比如: Array(“hh”,“red”,“java”,“hadoop”) 规则: 对集合中每个元素进行操作得到集合每个元素的长度
package com.tipdm.scalaDemoobject p6 {def main(args: Array[String]): Unit {def ppp(arr: Array[String]): Array[Int] {arr.map(element element.length)}val array Array(hh, red, java, hadoop)val lengths ppp(array)val p lengths.toList // 将数组转换为列表println(p) // 输出: List(2, 3, 4, 6)}
} 2、定义一个高阶函数
对数据中的元素按照指定的规则进行过滤 比如: Array(1,4,7,9,10,6,8,99,88,66) 规则: 只保留偶数数据
package com.tipdm.scalaDemoobject p6 {def main(args: Array[String]): Unit {def peng(arr: Array[Int]): Array[Int] {arr.filter(number number % 2 0)}val numbers Array(1, 4, 7, 9, 10, 6, 8, 99, 88, 66)val ppp peng(numbers)val p1 ppp.toList // 将数组转换为列表println(p1) // 输出: List(4, 10, 6, 88, 66)}
} 3、对数据中的元素按照指定规则进行分组
比如:Array(“zhangsan shenzhen man”,“lisi beijing woman”,“zhaoliu beijing man”) 规则: 按照地址进行分组
package com.tipdm.scalaDemoobject p6 {def main(args: Array[String]): Unit {def p1(arr: Array[String]): Map[String, List[String]] {arr.groupBy(person person.split( )(1)).mapValues(_.toList) // 将每个地址对应的数组转换为列表}val people Array(zhangsan shenzhen man, lisi beijing woman, zhaoliu beijing man)val newp1 p1(people)println(newp1)}
} .mapValues(_.toList): 由于groupBy返回的映射的值是数组所以这里使用mapValues方法来转换这些数组为列表。_.toList是一个简短的lambda表达式它接受一个数组并返回该数组的列表形式。 4、根据指定规则对数组所有元素聚合
比如:Array(10,4,6,10,2) 规则: 求和/求乘积
求和
package com.tipdm.scalaDemoobject p6 {def main(args: Array[String]): Unit {def peng(arr: Array[Int]): Int {arr.sum}val pp Array(10, 4, 6, 10, 2)val sum peng(pp)println(sum) // 输出: 32}
}求乘积
package com.tipdm.scalaDemoobject p6 {def main(args: Array[String]): Unit {def peng(arr: Array[Int]): Int {arr.product}val pp Array(10, 4, 6, 10, 2)val product peng(pp)println(product) // 输出: 4800}
}拓展-类和对象
示例
方法名称描述__init__构造函数用于初始化对象的状态。在创建对象时自动调用。get_attribute获取对象的某个属性值。set_attribute设置对象的某个属性值。do_action执行某个操作或任务可能涉及修改对象的状态或与其他对象交互。is_condition_met检查对象的某个条件是否满足并返回布尔值。calculate_result执行计算并返回结果。compare_to将当前对象与另一个对象进行比较并返回比较结果。to_string将对象转换为字符串表示形式。