Kotlin基础 7

news2024/9/22 17:17:04

1.apply函数详解  

1.1. DSL

/**
 * 为什么要传入扩展函数(泛型),而不是一个普通的匿名函数
 * T.()->Unit
 * 扩展函数里自带了接收者对象的this隐式调用
 * 为什么是泛型的扩展函数?
 * 因为是由this 隐式调用 this 类型就是泛型类型, 相当于this的扩展函数,就把this的作用域放进去了.
 *
 * 匿名函数,也可以是扩展函数
 *
 *
 */

2.函数式编程

 3.变换函数

3.1 map函数

 

fun main() {
    val animals:List<String> = listOf("zebra", "giraffe", "elephant", "rat")

    val map:List<String> = animals.map { animals -> "A baby $animals" } //相当于stream流 map 然后自动collectList
    println(animals)//不会改变原来的集合
    println(map)
}

 3.2 flapMap

fun main() {

    val flatMap =
        listOf(listOf(1, 2, 3), listOf(4, 5, 6, 7, 8, 9)).flatMap { it -> it.map { it + 1 } } //flatMap是合并泛型里同类型的集合
    println(flatMap)

}

3.3 filter

和Java一样,不需要过多重复

3.4 合并函数

zip

fun main() {

    val employees = listOf("Jack", "Rose", "Jason")
    val shirtSize = listOf("red", "green", "yellow")
    val map:Map<String,String> = employees.zip(shirtSize).toMap()
    println(map)
}

fold

 

fun main() {

    //将每个元素乘以三叠加起来
    val fold = listOf(1, 2, 3, 4).fold(0) { acc, i ->
        println("acc = $acc")
        acc + (i * 3)
    }
    println("sum = $fold")


}

4.序列

none 是 若有一个为 true 则为false ,全为false 则为true


fun Int.isPrime():Boolean{
    ( 2 until this).map {
        if (this % it == 0){
            return false
        }
    }
    return true
}

fun main() {


    //假定0-5000之内,可以找到1000个素数
    val toList = (1..5000).toList().filter { it.isPrime() }.take(1000)//take 拿去前1000个
    println(toList)

    //就是不知道有多少个可变的序列
    val oneTousandPrimes = generateSequence(2) { v ->
        v + 1
    }.filter { it.isPrime() }.take(1000)
    println(oneTousandPrimes.toList().size)

}

 5. Java与Kotlin互操作性和可空性

package javahuixang

fun main() {
    val adversary = Jhava()
    val determineGreeting = adversary.determineGreeting()
    //String! 平台类型  有可能会有空指针 ,需要处理一下
    println(determineGreeting?.toLowerCase())
}
package javahuixang;

public class Jhava {
    public String utterGreeting(){
        return "Hello";
    }

    public String determineGreeting(){
        return null;
    }





}

6.类型映射

package javahuixang;

public class Jhava {

    public int hitPoints = 3322;
    public String utterGreeting(){
        return "Hello";
    }

    public String determineGreeting(){
        return null;
    }





}
package javahuixang

fun main() {
    val jhava = Jhava()
    println(jhava.hitPoints.javaClass)
}

7.属性访问

 

package javahuixang

fun main() {
    val jhava = Jhava()
    println(jhava.hitPoints)
}
package javahuixang;

public class Jhava {

    private int hitPoints = 3322;
    public String utterGreeting(){
        return "Hello";
    }

    public String determineGreeting(){
        return null;
    }

    public int getHitPoints() {
        System.out.println("get");
        return hitPoints;
    }

    public void setHitPoints(int hitPoints) {
        this.hitPoints = hitPoints;
    }
}

8.Java调用kotlin

package javahuixang

fun main() {
    val adversary = Jhava()
    val determineGreeting = adversary.determineGreeting()
    //String! 平台类型  有可能会有空指针 ,需要处理一下
    println(determineGreeting?.toLowerCase())
}


fun makeProclamation() = "Greetings,beast!"
   public static void main(String[] args) {
        String s = HeroKt.makeProclamation();
        System.out.println(s);
    }

9.@file:JvmName 给kotlin文件起别名

@file:JvmName("Hero")
package javahuixang
fun main() {
    val adversary = Jhava()
    val determineGreeting = adversary.determineGreeting()
    //String! 平台类型  有可能会有空指针 ,需要处理一下
    println(determineGreeting?.toLowerCase())
}


fun makeProclamation() = "Greetings,beast!"
 public static void main(String[] args) {
        String s = Hero.makeProclamation();
        System.out.println(s);
    }

10.@JvmField

package javahuixang

class Spellbook{
    @JvmField
    val spells = listOf("a","b")
   
}
  public static void main(String[] args) {
        Spellbook spellbook = new Spellbook();//加了  @JvmField 自动调用 kotlin的get方法 ,给Java提供了Kotlin的语法
        List<String> spells = spellbook.spells;
    }

11.@JvmOverload

@JvmOverloads
fun handOverFood(leftHand:String="berries",rightHand:String = "beef"){
    println("Mmmm... you hand over some delicious $leftHand and $rightHand")
}
 public static void main(String[] args) {
        //Java要支持 用默认值 得重载
        Hero.handOverFood();
    }

kotlin最大的优势就是可以和Java互编

12. @JvmStatic

package javahuixang

class Spellbook{
    @JvmField
    val spells = listOf("a","b")

    companion object{
        @JvmField
        val MX=10
        @JvmStatic
        fun getSpellGreeting() = println("i am a good")
    }

}
    public static void main(String[] args) {
        //Java要支持 用默认值 得重载
//        Spellbook.Companion.getMX();
        System.out.println(Spellbook.MX);
        //让JAVA支持kotlin的写法
        Spellbook.getSpellGreeting();
    }

类加载就加载出来的,在JVM加载不会有线程安全问题

13.Throws

 Kotlin抛出的异常,让JAVA能够catch到

 想要Java 能够catch kotlin 抛出的异常,必须用 这个注解

@kotlin.jvm.Throws(IOException::class)
fun acceptApology() {
    throw IOException()
}

Java 

  try {
            Hero.acceptApology();
        } catch (IOException e) {
            System.out.println("catch");
        }

14.函数类型操作

 Java调用kotlin 匿名函数

val translator= {utterance:String ->
    println(utterance.toLowerCase().capitalize())
}
    public static void main(String[] args) {

        Function1<String, Unit> translator = Hero.getTranslator();

         translator.invoke("TRUCE");


    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1464284.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

短剧小程序开发,重塑视频观看体验的科技革命

随着科技的飞速发展&#xff0c;人们的娱乐方式也在不断变化。短剧小程序作为新兴的数字娱乐形式&#xff0c;以其独特的魅力和巨大的市场潜力&#xff0c;正逐渐成为科技与娱乐结合的代表。本文将探讨短剧小程序的发展背景、优势特点、开发流程以及未来展望。 一、短剧小程序…

MySQL数据库集群技术主从复制 一主一从详细讲解

集群技术 集群概述 MySQL复制技术 集群目的 负载均衡 解决高并发 高可用HA 服务可用性 远程灾备 数据有效性 类型 一主一从 一主双从 双主双从 原理 概念 在主库上把数据更改&#xff08;DDL DML DCL&#xff09;记录到二进制日志&#xff08;Binary Log&#xff09;中…

RISC-V知识总结 —— 指令集

资源1: RISC-V China – RISC-V International 资源2: RISC-V International – RISC-V: The Open Standard RISC Instruction Set Architecture 资源3: RV32I, RV64I Instructions — riscv-isa-pages documentation 1. 指令集架构的类型 在讨论RISC-V或任何处理器架构时&…

Code Release Process

Code Control Process-CSDN博客 代码发布流程&#xff08;Code Release Process&#xff09;

Java毕业设计-基于ssm的校园二手交易管理系统-第67期

获取源码资料&#xff0c;请移步从戎源码网&#xff1a;从戎源码网_专业的计算机毕业设计网站 项目介绍 基于ssm的校园二手交易管理系统&#xff1a;前端jsp、jquery&#xff0c;后端 springmvc、spring、mybatis&#xff0c;集成商品管理、订单管理、销售管理、采购管理、购…

vue.js el-tooltip根据文字长度控制是否提示toolTip

一、需求&#xff1a;如何判断当前文本文字是否超出文本长度&#xff0c;是否需要出现提示toolTip。效果图如下&#xff1a; 二、实现&#xff1a; 1、表格字段鼠标放置el-popover出现 “引用主题” 的具体内容&#xff1b; <!-- 表格字段&#xff1a;引用主题 --> <…

Azuki NFT 概览与数据分析

作者&#xff1a;stellafootprint.network 编译&#xff1a;cicifootprint.network 数据源&#xff1a;Azuki NFT Collection Dashboard Azuki NFT 将动漫艺术与实用性相结合&#xff0c;培育了一个充满活力的 Web3 社区。 这个 NFT 项目会在 2024 年崛起吗&#xff1f; …

数字化转型导师坚鹏:政府数字化转型之数字建设、发展与创新

政府数字化转型之数字基础设施建设、发展与创新 课程背景&#xff1a; 数字化背景下&#xff0c;很多政府存在以下问题&#xff1a; 不清楚数字基础设施建设现状&#xff1f; 不清楚数字基础设施发展趋势&#xff1f; 不清楚数字基础设施创新案例&#xff1f; 课程特色…

《优化接口设计的思路》系列:第八篇—分页接口的设计和优化

系列文章导航 第一篇—接口参数的一些弯弯绕绕 第二篇—接口用户上下文的设计与实现 第三篇—留下用户调用接口的痕迹 第四篇—接口的权限控制 第五篇—接口发生异常如何统一处理 第六篇—接口防抖(防重复提交)的一些方式 第七篇—接口限流策略 第八篇—分页接口的设计和优化 …

LeetCode刷题计划----day5

19 力扣链接&#xff1a;https://leetcode.cn/problems/squares-of-a-sorted-array/description/ 文章讲解链接&#xff1a;https://programmercarl.com/0977.%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E7%9A%84%E5%B9%B3%E6%96%B9.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8…

奇怪的需求之与图片做交互

1.起因 客户想要展示自己的地图,该地图上有各种工作数据,和工作点位,已有的地图不能满足需求.于是提出将这张图片当成大背景 2.经过 鉴于文件格式和尺寸的原因,协商后客户提出将图片做成缩放效果,同时具有点击效果,原先直接进入的主页,现在为点击图片中的某条线路进入主页面…

WordPres Bricks Builder 前台RCE漏洞复现(CVE-2024-25600)

0x01 产品简介 Bricks Builder是一款用于WordPress的开发主题,提供直观的拖放界面,用于设计和构建WordPress网站。它使用户能够轻松创建自定义的网页布局和设计,无需编写或了解复杂的代码。Bricks Builder具有用户友好的界面和强大的功能,使用户可以通过简单的拖放操作添加…

【力扣hot100】刷题笔记Day9

前言 阴天睡得还挺舒服&#xff0c;9点半才醒&#xff0c;用刷题开启美好新一天&#xff01; 141. 环形链表 - 力扣&#xff08;LeetCode&#xff09; 哈希表 class Solution:def hasCycle(self, head: Optional[ListNode]) -> bool:seen set() # 哈希集合# seen {} #…

Web前端3D JS框架和库 整理

在WebGL库和SVG/Canvas元素的支持下&#xff0c;JavaScript变得惊人的强大。几乎可以为网络构建任何东西&#xff0c;包括基于浏览器的游戏和本地应用&#xff0c;许多最新的突破性功能都在3D上运行。 为此&#xff0c;「数维图小编」整理了19个交互式3D Javascript库和框架&am…

龙年加密行业能否迎来发展春天?行业大咖带你探秘投资风口

在过去数年里&#xff0c;加密行业的牛熊市转换&#xff0c;时刻牵动着行业人士的心。无论是初入加密行业的开发新人&#xff0c;还是金融行业经验拉满的投资大佬&#xff0c;都在变动不居的环境下探寻着适应行业发展、捕捉创新机遇的方向。这一过程中&#xff0c;如何专注项目…

(十四)【Jmeter】线程(Threads(Users))之开放模型线程组(Open Model Thread Group)

简述 操作路径如下: 开放模型线程组(Open Model Thread Group) 是 JMeter 5.5 版本中引入的一个新特性,它允许用户创建具有可变负载的负载配置文件。相较于传统的线程组,开放模型线程组提供了更多的灵活性和动态调整的能力。 优点: 灵活性:允许测试人员根据测试需求动…

【EI会议征稿通知】第五届管理科学与工程管理国际学术会议(ICMSEM 2024)

第五届管理科学与工程管理国际学术会议&#xff08;ICMSEM 2024&#xff09; 2024 5th International Conference on Management Science and Engineering Management 第五届管理科学与工程管理国际学术会议 (ICMSEM 2024&#xff09;将于2024年6月07-09日于中国沈阳召开。会…

【MATLAB GUI】 4. 坐标区和表

看B站up主freexyn的freexyn编程实例视频教程系列36Matlab GUI的学习笔记 文章目录 坐标区表 坐标区 任务要求设计一个图像显示界面&#xff0c;根据选定的周期做出相应的sin函数图像 使用坐标区、弹出式菜单、普通按钮设计页面&#xff0c;弹出式菜单string设置为1、2、3、4代…

人工智能会是第四次工业革命吗?引领第四次工业革命的核心力量

许多专家和学者确实认为人工智能&#xff08;AI&#xff09;将是第四次工业革命的核心。第四次工业革命&#xff0c;也被称为"工业4.0"&#xff0c;是指正在发生的一场以高度数字化和互联网为基础的技术革新。 自18世纪的蒸汽机&#xff0c;到20世纪的电力和信息技术…

三次握手,四次挥手的大白话版本

三握四挥 首先我们要知道握手和挥手是在做什么&#xff0c;握手是为了让客户端和服务端建立连接&#xff0c;挥手是为了让客户端和服务端断开连接&#xff0c;握手时客户端主动发起请求&#xff0c;挥手双方都能发起请求。 三次握手 有必要解释一下&#xff0c;SYN的意思是同…