Java Lambda 表达式快速学习
Lambda 表达式来源于数学, 因为其简洁性,很多开发语言都支持, Java 在版本8 开始引入。
Lamba 表达式是什么?
- 匿名内部类
- 接口只能有一个需要被实现的方法
Lamba 表达式作用
- 代码变得简洁
- Lamba 表达式可以直接作为参数传递给函数
Lamba 语法
()->{}
()
括号 用来描述参数列表{}
大括号 用来描述方法体->
是Lambda 运算符,读作goes to
(parameters) -> expression
(parameters) -> {statements}
(parameters) -> statement
- 类型声明 可选, 编译器可以自动识别
- 参数圆括号 可选 , 一个参数可以不需要
- 大括号 可选 , 一条语句可以不需要
- 返回关键字 可选 , 只有一个返回值会自动返回
Java Lambda 表达式的写法
接下来从方法返回值和方法参数两个维度来定义接口和方法, 再使用Lambda表达式定义匿名类。汇总如下表:
无返回值 | 有返回值 | |
---|---|---|
无参数 | 1. NoReturnNoParamI | 4. HasReturnNoParamI |
单参数 | 2. NoReturnSingleParamI | 5. HasReturnSingleParamI |
多参数 | 3. NoReturnMultiParamI | 6. HasReturnMultiParamI |
1. 无返回值无参数接口方法
接口定义:
@FunctionalInterface
public interface NoReturnNoParamI {void method();
}
- @FunctionalInterface 注解用来标识该接口有且只有一个抽象方法
使用Lambda表达式实现接口方法并返回该实现类实例的代码如下:
NoReturnNoParamI noReturnNoParam = ()->{System.out.println("noReturnNoParam");};noReturnNoParam.method();
- () 用来描述参数
- {} 大括号里面是方法体, 如果方法体只有一个语句,也可以省略大括号
noReturnNoParam = ()->System.out.println("noReturnNoParam");
2. 无返回值单个参数接口方法
接口定义如下:
@FunctionalInterface
public interface NoReturnSingleParamI {void method(String param);
}
Lambda 表达式的写法如下:
NoReturnSingleParamI noReturnSingleParam = (String param)-> System.out.println("noReturnSingleParam,param="+param);noReturnSingleParam.method("Hello");
单个参数可以省略大括号, 也可以省略类型, 可以简写为:
noReturnSingleParam = param-> System.out.println("noReturnSingleParam,param="+param);
3. 无返回值多个参数接口方法
接口定义如下:
@FunctionalInterface
public interface NoReturnSingleParamI {void method(String param);
}
Lambda 表达式写法如下:
NoReturnMultiParamI noReturnMultiParam = (String param1,String param2) -> System.out.println("noReturnMultiParam,param1="+param1+";param2="+param2);noReturnMultiParam.method("张三","李四");
4. 有返回值无参数接口方法
接口定义如下:
@FunctionalInterface
public interface HasReturnNoParamI {String method();
}
Lambda 表达式
HasReturnNoParamI hasReturnNoParam = ()-> {System.out.println("noReturnNoParam");return "Success";};String rtn = hasReturnNoParam.method();
5. 有返回值单参数接口方法
接口定义如下:
@FunctionalInterface
public interface HasReturnSingleParamI {String method(String param);
}
Lambda 表达式:
HasReturnSingleParamI hasReturnSingleParam = (String param)-> {System.out.println("hasReturnSingleParam,param="+param);return "Success";};
String rtn = hasReturnSingleParam.method("Hello");
6. 有返回值多参数接口方法
接口定义如下:
@FunctionalInterface
public interface HasReturnMultiParamI {String method(String param1,String param2);
}
Lambda 表达式:
HasReturnMultiParamI hasReturnMultiParam= (String param1,String param2)-> {System.out.println("hasReturnMultiParam,param1="+param1+";param2="+param2);return "Success";};
String rtn = hasReturnMultiParam.method("张三","李四");
本篇代码示例
- https://gitee.com/xuemingchen/java-ency/tree/master/src/main/java/com/osxm/je/base/lambda
Java Lambda 表达式快速学习相关推荐
- Lambda表达式的生动理解以及Java Lambda表达式常见使用场景
本篇承接上一篇 Java Lambda 表达式快速学习 , 对Lambda 表达式的语法格式进行演化说明, 并对Java 中Lambda表达式的常见使用场景进行说明. Lambda 表达式怎么来的? ...
- 深入理解Java Lambda表达式,匿名函数,闭包
前言 对于Lambda表达式一直是知其然不知其所以然,为了搞清楚什么是Lambda表达式,以及Lambda表达式的用法和作用,本文应运而生当做学习笔记分享出来,欢迎指正交流. 什么是Lambda 让我 ...
- Java Lambda表达式入门
本文转自:http://blog.csdn.net/renfufei... 转载请注明出处 原文链接: Start Using Java Lambda Expressions 下载示例程序 Examp ...
- java拉姆达表达式事例,Java Lambda表达式详解和实例
简介 Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体( ...
- Java Lambda表达式初探
前言 本文受启发于Trisha Gee在JavaOne 2016的主题演讲Refactoring to Java 8. Java 8已经发行两年多,但很多人仍然在使用JDK7.对企业来说,技术上谨慎未 ...
- 【外文翻译】外国友人写得很不错的Java Lambda表达式入门教程,我终于翻译好给大家啦!!!...
" 英语原文的链接在最底下的"阅读原文" " 简介 (译者认为: 超过 3 行的逻辑就不适用 Lambda 表达式了.虽然看着很先进,其实 Lambda 表达式 ...
- Java进阶(五十五)-Java Lambda表达式入门
原文链接: Start Using Java Lambda Expressions 下载示例程序 Examples.zip . 简介 (译者注:虽然看着很先进,其实Lambda表达式的本质只是一个 ...
- Java Lambda表达式入门 1
转载请标明出处:http://blog.csdn.net/xx326664162/article/details/53930569 文章出自:薛瑄博客 我对Java 8发布非常激动,尤其是lambda ...
- Java Lambda表达式的箭头理解总结
Java Lambda表达式的箭头理解总结 文章目录 Java Lambda表达式的箭头理解总结 一.简单的Lambda的基础知识点: 二.Lambda 表达式示例 1.实现方法没有参数,无返回值的情 ...
最新文章
- Yann LeCun:假如没有深度学习,Facebook就是尘埃
- Android 四大组件之——Acitivity(一)
- 何时该用无服务器,何时该用Kubernetes?
- LeetCode 2091. 从数组中移除最大值和最小值(一次遍历)
- DOS批处理删除文本文件重复的行
- 大兴服务器硬盘回收行情价格,回收服务器 硬盘 内
- WINDOWS BAT的命令,双引号位置要注意
- uCOS-II的学习笔记(共九期)和例子(共六个)
- 如何用Primer6批量设计引物(非全cDNA引物)
- 2021年电工(技师)考试报名及电工(技师)模拟考试题
- [Vmware卸载] Vmware12卸载
- 超实用的!南京南站最新停车指南来了
- 基于蚁群算法的MTSP问题
- android6.0以上模拟位置状态检测
- 计算某年某月某日是星期几(基姆拉尔森计算公式)
- HTML基础常识问答(四)
- 进度模型方法论,利用“削峰填谷”进行资源优化
- 6.5趣味逻辑之委派任务
- 法线贴图Shader
- nvm介绍及常用命令
热门文章
- 浅谈CDQ分治与偏序问题
- ORB-SLAM2初步(跟踪模块)
- 关于头文件的一道选择题
- Linux_异常_01_CentOS7无法ping 百度
- MySQL5.7报错[ERROR] Unix socket lock file is empty /tmp/mysql.sock.lock的解决方法
- 【白皮书分享】2021国有企业数字化转型指数与方法路径白皮书.pdf(附下载链接)...
- 【白皮书分享】2021年B2B内容营销白皮书.pdf(附下载链接)
- 【分享】美图个性化Push AI探索之路(附交流视频和PPT下载链接)
- 使用方法_山西硅肥使用方法
- vbs连接oracle11,vbs连oracle数据库