• Kotlin基础学习 17


    目录

    1.Kotlin语言的过滤函数-filter

    2.Kotlin语言的合并函数-zip

    3.Kotlin语言的函数式编程

    4.Kotlin语言的互操作性与可空性

    5.单例模式

    6.注解@Jvmname与Kotlin

    7.注解@JvmField与Kotlin

    8.注解@JvmOverloads与Kotlin

    9.注解@JvmStatic与Kotlin

    10.手写RxJava,全部用KT的基础来写


    1.Kotlin语言的过滤函数-filter

    1. // TODO 126.Kotlin语言的过滤函数-filter
    2. fun main(){
    3. val nameLists = listOf(
    4. listOf("黄晓明","李连杰","李小龙"),
    5. listOf("刘军","李元","刘明"),
    6. listOf("刘俊","黄家驹","黄飞鸿")
    7. )
    8. nameLists.map {
    9. println(it)
    10. }
    11. println()
    12. nameLists.flatMap {
    13. println(it)
    14. listOf("")
    15. }
    16. println()
    17. nameLists.flatMap {
    18. //进来3次
    19. it -> it.filter {
    20. println("$it filter") //进来9次
    21. true
    22. //原理:filter {true,false} true他会加入到新的集合 进行组装新集合 返回,否则返回false,过滤掉,不加入,返回空集合
    23. }
    24. }.map {
    25. print("$it ")
    26. }
    27. println()
    28. nameLists.flatMap {
    29. it -> it.filter {
    30. true
    31. }
    32. }.map{
    33. print("$it ")
    34. }
    35. println()
    36. //List<T>返回给map后的效果:[黄晓明, 李连杰, 李小龙] [刘军, 李元, 刘明] [刘俊, 黄家驹, 黄飞鸿]
    37. //List<T>返回给flatMap后的效果:黄晓明 李连杰 李小龙 刘军 李元 刘明 刘俊 黄家驹 黄飞鸿
    38. nameLists.flatMap {
    39. it -> it.filter {
    40. it.contains('黄')
    41. }
    42. }.map {
    43. print("$it ")
    44. }
    45. }

    2.Kotlin语言的合并函数-zip

    1. // TODO 126.Kotlin语言的合并函数-zip
    2. fun main(){
    3. val names = listOf("张三","李四","王五")
    4. val ages = listOf(20,21,22)
    5. //RxJava zip 合并操作符
    6. //KT 自带就有zip 合并操作
    7. //原理:就是把第一个集合和第二个集合合并起来,创建新的集合,并返回
    8. // 创建新的集合(元素,元素,元素)元素Pair(K,V) K代表第一个集合的元素 V代表集合的第二个元素
    9. val zip:List<Pair<String,Int>> = names.zip(ages)
    10. println(zip)
    11. println(zip.toMap())
    12. println(zip.toMutableSet())
    13. println(zip.toMutableList())
    14. println()
    15. //遍历
    16. zip.forEach{
    17. println("姓名是:${it.first},年龄是:${it.second}")
    18. }
    19. println()
    20. //map普通方式
    21. zip.toMap().forEach { k,v ->
    22. println("姓名是:${k},年龄是:${v}")
    23. }
    24. println()
    25. //map 结构的方式
    26. zip.toMap().forEach { (k,v) ->
    27. println("姓名是:${k},年龄是:${v}")
    28. }
    29. println()
    30. zip.toMap().forEach {
    31. println("姓名是:${it.key},年龄是:${it.value}")
    32. }
    33. }

    3.Kotlin语言的函数式编程

    1. // TODO 128.Kotlin语言的函数式编程
    2. fun main(){
    3. val names = listOf("张三","李四","王五")
    4. val ages = listOf(20,21,22)
    5. names.zip(ages).toMap().map { "你的名字是${it.key},你的年龄是${it.value}" }.map { println(it) }
    6. }

    4.Kotlin语言的互操作性与可空性

    1. // TODO 129.Kotlin语言的互操作性与可空性
    2. fun main(){
    3. //下面是java与KT交互,错误的案例
    4. /**println(KtBase129().info1.length)
    5. println(KtBase129().info2.length)*/
    6. //下面是java与KT交互,错误的案例
    7. //: String! Java与KT交互的时候,Java给KT用的值,都是:String! 这种类型
    8. /**val info1 = KtBase129().info1
    9. val info2 = KtBase129().info2
    10. println(info1.length)
    11. println(info2.length)*/
    12. //下面是Java 与 KT交互正确的案例
    13. //只要是看到 String! 的类型,在使用的时候,必须?.xxx 这个是规则1,但是不好,忘记写的话有风险
    14. val info1s = KtBase129().info1
    15. val info2s = KtBase129().info2
    16. println(info1s?.length)
    17. println(info2s?.length)
    18. //下面是Java 与 KT交互正确的案例2
    19. val info1ss:String? = KtBase129().info1
    20. val info2ss:String?= KtBase129().info2
    21. println(info1ss?.length)
    22. println(info2ss?.length)
    23. }

    5.单例模式

    1. //1.饿汉式的实现 Java版本
    2. public class SingletonDemo {
    3. private static SingletonDemo instance = new SingletonDemo();
    4. private SingletonDemo(){}
    5. public static SingletonDemo getInstance(){
    6. return instance;
    7. }
    8. }
    9. //2.懒汉式的实现 Java版本
    10. public class SingletonDemo2 {
    11. private static SingletonDemo2 instance ;
    12. private SingletonDemo2(){}
    13. public static SingletonDemo2 getInstance(){
    14. if(instance == null){
    15. instance = new SingletonDemo2();
    16. }
    17. return instance;
    18. }
    19. }
    20. //3.懒汉式的实现 Java版本 安全
    21. public class SingletonDemo3 {
    22. private static SingletonDemo3 instance ;
    23. private SingletonDemo3(){}
    24. public static synchronized SingletonDemo3 getInstance(){
    25. if(instance == null){
    26. instance = new SingletonDemo3();
    27. }
    28. return instance;
    29. }
    30. }
    31. //4.懒汉式的实现 Java版本 双重校验安全
    32. public class SingletonDemo4 {
    33. private volatile static SingletonDemo4 instance;
    34. private SingletonDemo4() {
    35. }
    36. public static synchronized SingletonDemo4 getInstance() {
    37. if (instance == null) {
    38. synchronized (SingletonDemo4.class){
    39. instance = new SingletonDemo4();
    40. }
    41. }
    42. return instance;
    43. }
    44. }
    1. //1.饿汉式的实现 KT版本
    2. object SingletonDemoKt
    3. //2.懒汉式实现
    4. class SingletonDemo2Kt {
    5. companion object{
    6. private var instance : SingletonDemo2Kt ? = null
    7. get(){
    8. if(field == null){
    9. field = SingletonDemo2Kt()
    10. }
    11. return field
    12. }
    13. fun getInstanceAction() = instance!!
    14. }
    15. fun show(){
    16. println("show")
    17. }
    18. }
    19. fun main(){
    20. SingletonDemo2Kt.getInstanceAction().show()
    21. }
    22. //3.懒汉式实现 KT版本 安全
    23. class SingletonDemo3Kt {
    24. companion object{
    25. private var instance : SingletonDemo3Kt ? = null
    26. get(){
    27. if(field == null){
    28. field = SingletonDemo3Kt()
    29. }
    30. return field
    31. }
    32. @Synchronized
    33. fun getInstanceAction() = instance!!
    34. }
    35. fun show(){
    36. println("show")
    37. }
    38. }
    39. fun main(){
    40. SingletonDemo3Kt.getInstanceAction().show()
    41. }
    42. //4.懒汉式实现 KT版本 双重校验安全
    43. class SingletonDemo4Kt {
    44. companion object{
    45. val instance : SingletonDemo4Kt by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED){SingletonDemo4Kt()}
    46. }
    47. fun show(){
    48. println("show")
    49. }
    50. }
    51. fun main(){
    52. SingletonDemo4Kt.instance.show()
    53. }

    6.注解@Jvmname与Kotlin

    1. @file:JvmName("Stu") //在编译器环节,修改我们的类名,让我们的Java端调用更简洁
    2. package com.bxb.s7
    3. // TODO 131.注解@Jvmname与Kotlin
    4. fun getStudentNameValueInfo(str:String) = println(str)
    5. fun main(){
    6. }
    1. public class KtBase131 {
    2. public static void main(String[] args) {
    3. Stu.getStudentNameValueInfo("Bxb is ok");
    4. }
    5. }

    7.注解@JvmField与Kotlin

    1. // TODO 132.注解@JvmField与Kotlin
    2. class Person{
    3. @JvmField
    4. val names = listOf("张三","李四","王五")
    5. }
    1. public class KtBase132 {
    2. public static void main(String[] args) {
    3. Person person = new Person();
    4. for(String name : person.names){
    5. System.out.println(name);
    6. }
    7. }
    8. }

    8.注解@JvmOverloads与Kotlin

    1. // TODO 133.注解@JvmOverloads与Kotlin
    2. @JvmOverloads
    3. fun toast(name:String,sex:Char = 'M'){
    4. println("name:$name,sex:$sex")
    5. }
    6. fun main(){
    7. toast("李四")
    8. }
    1. public class KtBase133 {
    2. public static void main(String[] args) {
    3. KtBase133Kt.toast("zhangsan");//Java享用KT的默认参数
    4. }
    5. }

    9.注解@JvmStatic与Kotlin

    1. // TODO 134.注解@JvmStatic与Kotlin
    2. class MyObject{
    3. companion object{
    4. @JvmField
    5. val TARGET = "黄石公园"
    6. @JvmStatic
    7. fun showAction(name:String) = println("$name 要去 $TARGET 玩")
    8. }
    9. }
    10. fun main(){
    11. MyObject.TARGET
    12. MyObject.showAction("Bxb")
    13. }
    1. public class KtBase134 {
    2. public static void main(String[] args) {
    3. System.out.println(MyObject.TARGET);
    4. MyObject.showAction("Bxb");
    5. }
    6. }

    10.手写RxJava,全部用KT的基础来写

    1. //手写RxJava,全部用KT的基础来写
    2. fun main() {
    3. //creat输入源,没有任何参数给你 输出源:是输出就行(所有类型,万能类型)
    4. create {
    5. "Bxb"
    6. 123
    7. true
    8. "AAAAAAAA"
    9. 4563.54f
    10. }.map {
    11. "你的值是$this"
    12. }.map {
    13. "[$this]"
    14. }.map {
    15. "@@$this@@"
    16. }.observer {
    17. //只需要把上面输入的内容,打印输出即可,所以不需要管输出
    18. println(this)
    19. }
    20. }
    21. //中转站,保存我们的记录 //valueItem == create操作符最后一行的返回值 流向此处了
    22. class RxJavaCoreClassObject<T>(var valueItem: T) //主构造,接受你传递进来的信息,此消息就是create返回的最后一行
    23. inline fun<I> RxJavaCoreClassObject<I>.observer(observerAction:I.()->Unit) = observerAction(valueItem)
    24. inline fun <I, O> RxJavaCoreClassObject<I>.map(mapAction: I.() -> O) = RxJavaCoreClassObject(mapAction(valueItem))
    25. inline fun <OUTPUT> create(action: () -> OUTPUT) = RxJavaCoreClassObject((action()))

  • 相关阅读:
    什么是外贸独立站
    基于51单片机太阳能热水器控制系统-proteus仿真-程序
    vue3项目总结
    提高工作效率的神器:基于前端表格实现Chrome Excel扩展插件
    verilog实现分频(奇数分频和偶数分频,通用版)
    IP地址最终弹,DNS,数据链路层,特殊地址
    java使用elasticsearchClient调用es7.17
    Spring Cloud Gateway整合OAuth2思路分享
    与 Flutter 共创未来 | Flutter Forward 活动精彩回顾
    基于Java+Springboot+vue体育用品销售商城平台设计和实现
  • 原文地址:https://blog.csdn.net/m0_57026595/article/details/125483092