一、表达式格式定义

(parameters) -> expression 或 (parameters) ->{ statements; }

注意点:左边是输入参数,就相当于我们定义方法中的形参,当形参只有一个时可与除掉括号;

    右边是方法的定义表达式语句,就相当于我们被包裹的方法体,里面包含了方法的具体实现,当只有一条语句时也是可以除去大括号的,方法的定义的位置就相当于我们变量的位置;

    我们方法有入参,方法体,返回体;我们返回体的定义则是在接口中定义的,lambda表达式要严格执行接口中方法的定义。

二、基本功能练习


@Test
public void testLambda(){
//函数定义
MathOperation addMathOperation = (a, b) -> a+b;
MathOperation subMathOperation = (a, b) -> a-b;
MathOperation divMathOperation = (a, b) -> a/b;
MathOperation mulMathOperation = (a, b) -> a*b;
GreetService greetService = (message) -> System.out.println("hello"+message);
GreetService greetService1 = message -> System.out.println("hello"+message);
System.out.println("10 + 5 = " + this.mathOperationOperate(10, 5, addMathOperation));
System.out.println("10 - 5 = " + this.mathOperationOperate(10, 5, subMathOperation));
System.out.println("10 / 5 = " + this.mathOperationOperate(10, 5, divMathOperation));
System.out.println("10 * 5 = " + this.mathOperationOperate(10, 5, mulMathOperation));
greetService.sayMessage("有括号装饰");
greetService1.sayMessage("无括号装饰");
} //函数接口定义
interface MathOperation{
int operate(int a, int b);
} interface GreetService{
void sayMessage(String message);
} private int mathOperationOperate(int a , int b, MathOperation mathOperation){
return mathOperation.operate(a,b);
} final static int a = 12;
//1.注意点1:lambda 表达式只能引用标记了 final 的成员变量,这就是说不能在 lambda 内部修改定义在域外的局部变量,否则会编译错误。
@Test
public void testScope(){
MathOperation scopeMathOperation = (c, b)->a+c+b;
int scope = scopeMathOperation.operate(1,2);
System.out.println("变量作用域测试"+scope);
} //2.我们可以在lambda表达式中访问局部变量
@Test
public void testScope1(){
int a = 12;
MathOperation scopeMathOperatin = (c, b) -> a+c+b;
int scope = scopeMathOperatin.operate(1,2);
System.out.println("变量作用域测试"+scope);
} //3lambda 表达式的局部变量可以不用声明为 final,但是必须不可被后面的代码修改(即隐性的具有 final 的语义),引用的变量后期不可以更改
@Test
public void testScope2(){
int a = 12;
MathOperation scopeMathOperatin = (c, b) -> c+b;
int scope = scopeMathOperatin.operate(1,2);
System.out.println("变量作用域测试"+scope);
a = 1;//会报错
} //4在 Lambda 表达式当中不允许声明一个与局部变量同名的参数或者局部变量
@Test
public void testScope3(){
int a = 1;//编译异常
MathOperation scopeMathOperatin = (a, b) -> a+b;
int scope = scopeMathOperatin.operate(1,2);
System.out.println("变量作用域测试"+scope);
}
 

三、总结

主要有三点

  1.lambda表达式格式要符合规则,多参数需要小括号包装,一个参数无需包装;多表达式需要大括号包装,单表达式无需包装。

  2.lambda表达式的应用要完全符合接口的定义,入参,函数体,返回参数。

  3.lambda参数的定义域,lambda只能访问外部标记了final的成员变量,lambda方法内布局变量一经引用不可修改有final意思,lambda表达式中不可以申明或应用两个同样的变量名。

lumbda表达式初探的更多相关文章

  1. Java Lambda表达式初探

    Java Lambda表达式初探 前言 本文受启发于Trisha Gee在JavaOne 2016的主题演讲Refactoring to Java 8. Java 8已经发行两年多,但很多人仍然在使用 ...

  2. Java8 Lumbda表达式 初步

    Java8 Lumbda表达式 初步 package com.stono.test; import java.util.function.BinaryOperator; public class Te ...

  3. 自己构建的Lumbda表达式

    自己构建的Lumbda表达式 定义接口: package com.stono.lambda; public interface Add { public void add(int x, int y); ...

  4. 学习日记-从爬虫到接口到APP

    最近都在复习J2E,多学习一些东西肯定是好的,而且现在移动开发工作都不好找了,有工作就推荐一下小弟呗,广州佛山地区,谢谢了. 这篇博客要做的效果很简单,就是把我博客的第一页每个条目显示在APP上,条目 ...

  5. Objective-C语法简记

    开始学习iPhone开发了,虽然现在已经有了Swift,但我还是老老实实地学习Objective-C,鄙人入门的程序语言是C,后来学习了C#和Java,现在来学Objective-C,这篇只是一些很简 ...

  6. 跟我一起学习ASP.NET 4.5 MVC4.0(五)(转)

    前面几篇文章介绍了一下ASP.NET MVC中的一些基础,今天我们一起来学习一下在ASP.NET MVC中控件的封装.在页面中我们会经常使用到Html对象,来程序控件,当然这里的控件不是说ASP.NE ...

  7. Objective-C语法简记学习

    開始学习iPhone开发了,尽管如今已经有了Swift,但我还是老老实实地学习Objective-C,鄙人入门的程序语言是C,后来学习了C#和Java,如今来学Objective-C,这篇仅仅是一些非 ...

  8. .net软件反编译笔记

    在软件的破解及源码获取及重新编译的道路上会遇到一些问题,书此备查. 大名鼎鼎的Reflector以及开源的ILSPY都是.NET程序集的反编译利器,但是它们不能为你做全部的工作. 0x01: 遇到反编 ...

  9. 跟我一起学习ASP.NET 4.5 MVC4.0(五)

    前面几篇文章介绍了一下ASP.NET MVC中的一些基础,今天我们一起来学习一下在ASP.NET MVC中控件的封装.在页面中我们会经常使用到Html对象,来程序控件,当然这里的控件不是说ASP.NE ...

随机推荐

  1. 201621123075 Week02-Java基本语法与类库

    1.本周学习总结 本周学习了java的数据类型,有基本数据类型和引用数据类型(不同c),特有的boolean类型,取值只有true和false.还有包装类和数组,每一个基本类型都有相对应的包装类,对应 ...

  2. Android7.0手机程序保活(附源码下载)

    项目地址,求starhttps://github.com/979451341/AppAlive 本人在学习音视频时无意发现的黑科技,发现在使用AudioTrack播放音乐时,使用手机的一键清理发现程序 ...

  3. Caffe 根据log信息画出loss,accuracy曲线

    在执行训练的过程中,若指定了生成log信息,log信息包含初始化,网络结构初始化和训练过程随着迭代数的loss信息. 注意生成的log文件可能没有.log后缀,那么自己加上.log后缀.如我的log信 ...

  4. 解决jmeter乱码

    1. 解决响应数据乱码的方法:     在jemter文件下找到bin\jmeter.properties添加下面一句话:    sampleresult.default.encoding=UTF-8 ...

  5. 团队项目(MVP------新能源无线充电管理网站)(总结)

    经过了几个月的学习时间与团队的磨合以及一系列的困难之后,我们mvp小组一起完成了这个项目,内心也是十分激动和有成就感的.其实一开始基础并不好,很多都不知道,但是通过在慕课网上的学习以及老师严厉地督促下 ...

  6. C语言笔记变量与数据类型

    目录 1.转义字符 2.常量与变量 2.1 什么是常量和变量 2.2 内存 2.3 变量的内存机制 2.4 变量命名规则 2.5 变量的定义 2.6 常量的定义 2.7 计算机内存字节顺序 2.8 局 ...

  7. mod_conference ESL控制一(原理)

    本文介绍通过freeswitch mod_conference 的配置和APP,以及如何通过这些事件实现会议控制. 需求 ESL内联,发起会议.加人.踢人.静音.恢复静音.申请发言.结束会议等基础功能 ...

  8. day07 深浅拷贝

    今日概要 深浅拷贝(重点) 文件操作 详细内容 直接赋值: 直接将对象的引用赋值给另一个对象 v1=1000 v2=v1 #v1 v2指向同一个内存地址 print(id(v1),id(v2))#相等 ...

  9. java-Set集合、HashSet集合、LinkedHashSet集合和TreeSet集合

    1.Set集合,无索引,不可以重复,无序(存取不一致) public class Demo { public static void main(String[] args) { //demo1(); ...

  10. idea的maven项目下spring与mybatis整合

    两周前学习mybatis框架,参考了网上多位大神的博客,但因为各种原因(不解释)总是没法成功搭建环境并运行项目.周末花了点时间阅读了文档并整理之前琐碎的内容,解决掉之前遇到的问题.现将整合环境的关键步 ...