Java中的lambda匿名函数使用
Java中的lambda匿名函数使用
lambda匿名函数的使用是为了满足某些情况下需要临时定义函数,或者事先定义,需要时才使用。在python里面,lambda表达式的表达方式为:lambda 参数: 表达式,例如,需要对一个列表的每项元素进行加1操作,我们就可以这样:list(map(lambda x: x+1, range(10)),上述表达式中:list(iterables)是将括号里的参数转换成列表样式,参数要求是可迭代对象;map(func, iterables)则是将iterables可迭代对象中的每个元素都调用函数func;lambda x: x+1则是一个匿名函数,参数为x,对x进行加1操作;range(10)则是生成一个[0,1,2,3,4,5,6,7,8,9]的列表,也就是Java中的数组。
一下是python中的map函数的源码解释

回到我们的Java,Java中的lambda表达式则有一点不一样,语法为(参数1,参数2) -> statements/block,当不需要参数时,就可以直接写为() -> statement/block,比如说() -> System.out.println("I use lambda")。其实现当时需要一个函数接口,函数接口形如public static void func(Interface action) { statements;},关于函数接口,就是定义一个函数,参数为一个接口类型,里面的语句就是调用接口中定义的方法。因为接口只是定义了,并没有实现方法,所以说当我们将一个形如lambda函数的函数引用传入时,该函数就会直接实现传入的函数。比如说:
public interface interfaceTest { //定义一个函数接口
void test();
}
public class test {
public static void main(String[] args) {
tt(()-> System.out.println("调用lambda"));
}
public static void tt(interfaceTest action){
action.test(); //调用函数接口中未实现的方法
}
}
另外一个带参数的例子:
public interface interfaceTest { //定义一个函数接口
void test(int value); //
}
public class test {
public static void main(String[] args) {
tt(10;(i)-> System.out.println(i+1)); // lambda语句的意思为给参数实行+1操作
}
public static void tt(int n,interfaceTest action){
for (int i=0;i<n;i++) {
action.test(i);
}
}
}
函数引用。lambda表达式实则上一个函数引用,除此之外还有另一个例子:
public interface interfaceTest { //定义一个函数接口
void test();
}
public class test {
public static void main(String[] args) {
repeat(10, test::test));
}
public static void test() {
System.out.println("hello");
}
public static void repeat(int n, interfaceTest action)
{
for (int i = 0; i < n; i++) action.test();
}
}
这里函数引用主要有三种情况:
- object::instanceMethod
- Class::staticMethod
- Class::instanceMethod
就拿第一种来说,就描述的是object中的instanceMethod方法,其中instanceMethod的参数类型需要与定义的函数接口一致,若函数引用中的函数有参数,则函数接口也应该有相应的参数。比如说:
public interface interfaceTest { //定义一个函数接口
void test(int value);
}
public class test {
public static void main(String[] args) {
repeat(10,test::testTwo);
}
public static void repeat(int n, interfaceTest action)
{
for (int i = 0; i < n; i++) action.testTwo(i);
}
public static void testTwo(int n) {
System.out.println("test:"+n);
}
}
可能有人会说lambda函数跟这个有什么关系,我们看看下面这个:

就可以知道,其实函数引用也是属于lambda的一部分。
Java中的lambda匿名函数使用的更多相关文章
- Java中的Lambda匿名函数后续
函数式编程(函数式接口):一个接口只包含一个方法实现 public interface Lambda{ void method(); } // 调用 Lambda lambda = new Lambd ...
- python 中的sort 和java中的Collections.sort()函数的使用
x=[1,2,3] x.sort()对的,x这个都变了 y=x.sort()错误 y=sorted(x)对的,x拍好序的一个副本 python中用匿名函数和自定义函数排序:(很奇怪的是比较函数返回的是 ...
- Lambda 表达式,Java中应用Lambda 表达式
一.Lambda 表达式 简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数. 链接:知乎 先举一个普通的 Python 例 ...
- 理解和运用Java中的Lambda
前提 回想一下,JDK8是2014年发布正式版的,到现在为(2020-02-08)止已经过去了5年多.JDK8引入的两个比较强大的新特性是Lambda表达式(下文的Lambda特指JDK提供的Lamb ...
- lambda匿名函数透析
lambda匿名函数透析 目录 1 匿名函数的作用... 1 2 匿名函数的格式... 1 3 匿名函数实例代码... 3 1 匿名函数的作用 ...
- lambda 匿名函数
# 普通python函数 def func(a,b,c): return a+b+c print func(1,2,3) # 返回值为6 # lambda匿名函数 f = lambda a,b,c:a ...
- 当列表推导式遇到lambda(匿名函数)
Python这么优雅的语言,我也是醉了...... 事情由一段代码引发,请看: 上述的列表推导式+lambda表达式+for循环,他们碰撞出来的结果搞的人晕头转向,咱们逐步来分析一下他们到底是个什么鬼 ...
- lambda匿名函数和他的小伙伴(处理大量数据的时候用到)
lambda匿名函数 主要是为了解决一些简单的需求而设计的一句话函数 #计算n的n次方 def func(n): return n**n f = lambda n : n ** n 语法: 函数名 = ...
- lambda匿名函数,sorted(),filter(),map(),递归函数
1.lambda匿名函数 为了解决一些简单的需求而设计的一句话函数 #计算n的n次方 def func(n): return n**n print(func(10)) f = lambda n: n* ...
随机推荐
- 哲思集-转载自CSDN
CSDN 创始人蒋涛:世界被编码之后 分享赚¥9.90订阅博主 “写代码 20 年,通过网络平台和社区,帮助中国的程序员更好成长,这是我最希望被大家记住的.”这是蒋涛接受 ZAKER 采访的开场白. ...
- bluetoothctl命令提示No default controller available
在学习bluetoothctl命令时,执行bluetoothctl,然后执行show,提示No default controller available. 1. 执行hciconfig,发现有hci0 ...
- Hyperledger Fabric【区块链学习一】
Hyperledger Fabric 学习 什么是区块链 什么是区块链在我们没有接触的时候,只知道它是一个去中心化的存储方式.当我们发生交易,或者动作的时候我们会将记录通知给所有参与者共同维护,达到去 ...
- 初识ABP vNext(5):ABP扩展实体
Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 目录 前言 开始 扩展实体 路由整理 最后 前言 上一篇实现了前端vue部分的用户登录和菜单权限控制,但是有一些问题需要解决,比如用户头 ...
- 浅谈AutoML
Auto ML的概念很广很深,本篇文章旨在概念上的一些理解. 我们之前谈过一个模型从幕后走向台前是有很多的工作要做的,AutoML的最初目标正如其名字是想自动化这个过程.实际上有很多人讨论到Aut ...
- openstack nova 手动修改虚拟机状态
source admin-openrc.sh nova list nova reset-state <id> --active
- Fisher Coffee 测评(非严格控温控水)
Fisher Coffee 测评(非严格控温控水) 咖啡生产批次:2020-05-29 打分区间:1~5,0.5间隔 批次:2020.6.3 酸为主,苦为主. 无甘,有甘,微甘,较甜,甘甜. 不苦,有 ...
- Prefrontal cortex as a meta-reinforcement learning system
郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Nature Neuroscience, 2018 Abstract 在过去的20年中,基于奖励的学习的神经科学研究已经集中在经典模型上, ...
- JdbcTemplate jar包 下载
我给了一个链接, 是jar download网站上的. 能上去的就可以下载. https://jar-download.com/maven-repository-class-search.php?se ...
- Java面试题(Java Web篇)
Java Web 64.jsp 和 servlet 有什么区别? jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将 ...