lamda表达式和三个例子

lamda表达式和三个例子(参数)->{方法语句}这样的形式就是lamda表达式,不用定义参数和返回值的数据类型-可以省略的情况:只有一个参数的时候参数可以不用括号;只有一个语句的时候大括号可以不用;只有一个语句且是return的时候可以省略return,直接写需要返回的值(表达式)目录1、for循环实例2、多线程实例3、sort排序实例1、for循环实例这个实例展示了传入一个参数且无返回值的用法定义一个字符串数组并实例化,对这个数组进行操作。通常的打印所有元..

大家好,又见面了,我是你们的朋友全栈君。

(参数)->{
方法语句}

这样的形式就是lamda表达式,不用定义参数和返回值的数据类型

可以省略的情况:

只有一个参数的时候参数可以不用括号;

只有一个语句的时候大括号可以不用;

只有一个语句且是return的时候可以省略return,直接写需要返回的值(表达式)

目录

1、for循环实例

 2、多线程实例

3、sort排序实例


1、for循环实例

这个实例展示了传入一个参数且无返回值的用法

定义一个字符串数组并实例化,对这个数组进行操作。

lamda表达式和三个例子

通常的打印所有元素的方法:

lamda表达式和三个例子

增强for循环,专门针对列表\数组的循环类型,可以将元素逐个取出参与操作且无需使用脚标。

 

正常的方法是方法名写外面,操作对象写里面。现在有一种将操作对象写外面,执行的方法写里面的方法。

lamda表达式和三个例子

注意:对于静态方法可以如图使用,据说动态方法必须先创建对象才能使用。

(但还没有找到例子)

players.forEach相当于对players进行增强for循环的结果,即每一个元素,是被操作对象。

方法在里面,双冒号代表【方法所属的包(类)::方法名】

这个语句的意思是对遍历的每个元素(字符串)执行sout。

 

还可以将括号内的方法换成由lamda表达式确定的方法

lamda表达式和三个例子

(player) -> System.out.print(player + “; “)是lamda表达式,

意思是当接收到一个参数时(箭头左边),将这个参数打印出来(右边)

参数player未指定数据类型,或者说传入的数据类型不限制,右侧的语句显示要将player作为形参参与打印。

此时括号外面的forEach向括号内部传入了一个参数,即某次循环取出的元素,然后执行表达式的语句打印出来。

箭头左侧的参数可以不指定类型,

箭头右侧的返回值也可以不指定类型

系统可以猜测类型并自动把数据变成相应的类型。

 

 

 


 

 2、多线程实例

这个实例展示了不传入参数的用法

lamda表达式和三个例子

race1.run()

race1.start()

race2.eun()均可运行

 

但是race2.start()不可运行,

因为Runable没有start方法

不传入参数基本上相当于直接执行,与lamda表达式关系不大,仅做展示用。

Thread()的参数需要Runable target类型,lamda表达式可以自动改变返回值类型,使其可以作为Thread的参数存在

①中直接将整个lamda表达式放入Thread的参数位置,用一行完成了定义和start执行。相当于②

②是分开步骤,创建线程需要new Thread(),新建对象的参数是tar,tar就是返回成Runable target类的lamda表达式,然后再用start来启动线程即可达到和①相同的执行效果

③是用Runable创建线程的方法,由于Runable是接口,不能实例化,所以不用new,赋值成lamda表达式后执行即可


3、sort排序实例

这个实例展示了传入多个参数的用法

Arrays.sort(words,

(first,second)->first.length()-second.length()

);

这个语句是Arrays的sort方法,sort(数组,排序接口)

本例是在一个字符串数组内,对元素按照字符串长度排序

lamda表达式接受两个参数,我们要按照什么规则把实参输入到这两个形参中呢?

其实不用管!

排序接口是interface Comparator<T>,

实例化这样的对象本身就需要输入两个参数,接口根据自定义的规则返回正负零

sort方法会自动安排words中的元素输入到这两个形参,再按照接口返回的正负零来给words中的元素排序。

因此,若定一个一个多个输入参数的lamda表达式,则一定要由调用lamda表达式的方法规定输入参数的规则

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142899.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • navicat premium 15 mac激活码(JetBrains全家桶)

    (navicat premium 15 mac激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月27日
    77
  • 用MDK生成bin文件的步骤及方法

    用MDK生成bin文件的步骤及方法1用MDK生成bin文件Embest徐良平在RVMDK中,默认情况下生成*.hex的可执行文件,但是当我们要生成*.bin的可执行文件时怎么办呢?答案是可以使用RVCT的fromelf.exe工具进行转换。也就是说首先将源文件编译链接成*.axf的文件,然后使用fromelf.exe工具将*.axf格式的文件转换成*.bin格式的文件。下面将具体

    2022年10月20日
    0
  • Ubuntu卸载CUDA_ubuntu怎么卸载已经安装的软件

    Ubuntu卸载CUDA_ubuntu怎么卸载已经安装的软件1.暴力卸载sudoapt-getpurgenvidia*sudoapt-getautoremovesudoapt-getautoclean2.主动卸载sudo/usr/local/cuda-8.0/bin/uninstall_cuda_8.0.pl

    2022年9月5日
    3
  • 【详细】3分钟教会你使用USDT钱包「建议收藏」

    【详细】3分钟教会你使用USDT钱包「建议收藏」小编为您介绍一款安全系数非常高的USDT钱包,之所以安全系数非常高是因为去中心化模式,USDT钱包文件或私钥可以脱离网络储存,比如可以备份在手机里,硬盘里,U盘里,网盘里,甚至拿笔写在纸上。我们经常听说用户一般会把大部分数字资产存储到冷钱包,主要是为了安全的考虑,而把少量的数字资产存储在交易所热钱包,以方便交易,现在USDT钱包居多的是中心化钱包,用户的数字货币储存在交易所里,换句话说非常不安全,因为你不知道你的USDT钱包文件与私钥,交易所被黑客攻击或者自行关闭你是无能为力只能眼睁睁看这你的币子任由他

    2022年5月21日
    517
  • python新浪股票接口 历史数据_实时数据与历史数据的区别_新浪股市接口

    用Python抓取新浪的股票数据新浪默认字段中的日期字段名是day。我个人认为这很不舒服。如果是小时数据或5分钟数据称为天,是不是不舒服?所以到日期的变化实际上没有多大意义。这只是我的个人喜好。实时数据采集方法与历史数据差别不大。完整的代码地址是:。不同的是,实时数据可以用逗号分隔同时获得的多个代码。经过实验,似乎最多可以得到100张票的实时数据。链接=’。请求。urlopen(链接)。decod…

    2022年4月6日
    45
  • IDEA203版本激活码_通用破解码

    IDEA203版本激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    57

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号