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* ...
随机推荐
- Jmeter 常用函数(23)- 详解 __longSum
如果你想查看更多 Jmeter 常用函数可以在这篇文章找找哦 https://www.cnblogs.com/poloyy/p/13291704.htm 作用 计算两个或多个长值的和 注意 当值不在 ...
- 测量定位实践-:C#采集控制
用Halcon已经完成采集,在在C#中不行. 其实还是比较简单,主要是Halcon封装的太好了. 主要是以下几个算子: *打开 Image Acquisitionopen_framegrabber ( ...
- Python 为什么没有 void 关键字?
void 是编程语言中最常见的关键字之一,从字面上理解,它是"空的.空集.空白"的意思,最常用于 表示函数的一种返回值类型. 维基百科上有一个定义: The void type, ...
- OVS DPDK VXLAN隧道处理
原文链接: OVS DPDK VXLAN隧道处理
- 算法-deque双端队列
Python的deque模块,它是collections库的一部分.deque实现了双端队列,意味着你可以从队列的两端加入和删除元素 1.基本介绍 # 实例化一个deque对象d = deque()d ...
- MySQL数据库根据一个或多个字段查询重复数据
系统在开发测试过程中出现bug,比如并发操作没有处理好,数据库中往往会插入重复数据,这些脏数据经常会导致各种问题.bug可以修改,但是数据往往也要处理,处理SQL如下: 1.根据一个字段查找重复数据 ...
- pandas 数据子集的获取
有时数据读入后并不是对整体数据进行分析,而是数据中的部分子集,例如,对于地铁乘客量可能只关心某些时间段的流量,对于商品的交易可能只需要分析某些颜色的价格变动,对于医疗诊断数据可能只对某个年龄段的人群感 ...
- flutter 制作一个用户登录页面
flutter 制作一个用户登录页面 用户登录效果图如下: 登录页面如下: import 'package:flutter/material.dart'; import 'package:flutte ...
- Sign in with Apple 流程总结
流程图 相关说明 UserId 与用户的 Apple Id 一一对应.在同一个开发帐号下的所有 app 里,获取到的值都一样. IdentityToken identityToken 是一个 Json ...
- 全局api 2020/8/14
// 注意:每次调用 $.get() 或 $.post() 或 $.ajax() 的时候, // 会先调用 ajaxPrefilter 这个函数 // 在这个函数中,可以拿到我们给Ajax提供的配置对 ...