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* ...
随机推荐
- Spring @Transactional事物配置无效原因
spring @transaction不起作用,Spring事物注意事项 1. 在需要事务管理的地方加@Transactional 注解.@Transactional 注解可以被应用于接口定义和接口方 ...
- 如何获取东方财富文华新浪财经实时行情数据API接口
BIGI行情期货外汇股指A股期权实时行情数据文华新浪财经API接口新浪财经并非实时行情数据源,所以获取的行情数据源也并非实时的.以下介绍的方法和新浪财经获取行情数据源的方法是一致的.需要实时行情数据源 ...
- 启用valgrind的MPI支持
TL;DR sudo apt install valgrind-mpi 内存泄漏和越界问题,是C/C++程序常见问题.有一些工具提供了检测内存泄漏的功能,如 valgrind 的 memchecker ...
- Lambda 表达式推演全过程
Java 的 Lambda 表达式推演过程: 第一步:正常的类实现(外部实现),new一个对象,然后重写方法实现 public class TestLambda3 { public static vo ...
- 什么是URL标准化
http://www.wocaoseo.com/thread-194-1-1.html RL标准化是来自于国外matt cutts的博客文章,期望能给蜘蛛一个规范化的URL作为收录的标准.举个简单的例 ...
- 认识JavaScript中Let和Var的区别
本文转载自:https://www.cnblogs.com/songzxblog/p/11137117.html
- .Net ImageSharp给图片添加文字
开始之前需要Nuget安装的包 ##这三个包是一定要安装的,不然库的有些方法用不了 一.导入字体 var fonts = new FontCollection(); var fontFamily = ...
- RabbitMQ配置文件(advanced.config)
这是advanced.config配置文件示例: [ %% ------------------------------------------------ --------------------- ...
- 使用rabbitmq过程中遇到的问题及解决方法记录。
OS: Linux ---Centos7RabbitMQ版本:RabbitMQ version: 3.8.1erlang版本:Erlang configuration: Erlang/OTP 22 [ ...
- iOS打电话功能的简单实现
小功能简介 iOS中的很多小功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信等 打电话-方法3 创建一个UIWebView来加载URL,拨完后能自动回到原应用 if (_we ...