lambda表达式推导和使用
lambda
- λ希腊字母表中排序第十一位的字母,英语名称为 Lambda,
- 避免匿名内部类定义过多
- 其实质属于函数式编程的概念
(params) -> expression
(params) -> statement
(params) -> { statements }
new Thread(()->System.out.println("多线程学习。。。")).start();
1、lambda表达式逐级推导
package com.sxt.thread; /**
* Lambda表达式 简化线程(用一次)的使用
*/
public class LambdaThread { //静态内部类
static class Test implements Runnable {
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("一边听歌");
}
}
} public static void main(String[] args) { //new Thread(new Test()).start(); //局部内部类
class Test2 implements Runnable {
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("一边听歌");
}
}
} new Thread(new Test2()).start(); //匿名内部类 必须借助接口或是父类
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("一边听歌");
}
}
}).start(); //jdk8简化
new Thread(() -> {
for (int i = 0; i < 20; i++) {
System.out.println("一边听歌");
}
}).start();
}
}
2、再次推导,加深印象
package com.sxt.thread; /**
* @ClassName LambdaTest01
* @Description TODO
* @Date 2019/7/23 22:46
* @Version 1.0
*/
public class LambdaTest01 { //静态内部类
static class Like2 implements ILike{ @Override
public void lambda() {
System.out.println("I Like Lambda2");
}
} public static void main(String[] args) { ILike like = new Like();
like.lambda(); like = new Like2();
like.lambda(); //方法内部类
class Like3 implements ILike{ @Override
public void lambda() {
System.out.println("I Like Lambda3");
}
}
like = new Like3();
like.lambda(); //匿名内部类
like = new ILike() {
@Override
public void lambda() {
System.out.println("I Like Lambda4");
}
};
like.lambda();
//lambda推导必须存在类型
like = () -> {
System.out.println("I Like Lambda5");
};
like.lambda();
}
} interface ILike{
void lambda();
} //外部类
class Like implements ILike{ @Override
public void lambda() {
System.out.println("I Like Lambda");
}
}
3、lambda参数传递(无返回值)以及简化
package com.sxt.thread; /**
* lambda推导+参数
*/
public class LambdaTest02 { public static void main(String[] args) {
ILove love = (int a) -> {
System.out.println("I Like Lambda-->" + a);
};
love.lambda(100); //简化
love = (a) -> {
System.out.println("I Like Lambda-->" + a);
};
love.lambda(60); //只有一个参数,()可以省略
love = a -> {
System.out.println("I Like Lambda-->" + a);
};
love.lambda(80); //如果代码只是一行,还可以省略
love = a -> System.out.println("I Like Lambda-->" + a);
love.lambda(90);
}
} interface ILove {
void lambda(int a);
} //外部类
class Love implements ILove { @Override
public void lambda(int a) {
System.out.println("I Like Lambda-->" + a);
}
}
4、多个参数+返回值
package com.sxt.thread; /**
* lambda推导+参数+返回值
*/
public class LambdaTest03 { public static void main(String[] args) {
IInterest interest = (int a, int c)-> {
System.out.println("I Like Lambda-->" + (a + c));
return a + c;
}; interest.lambda(100,200); interest = (a,c)-> {
System.out.println("I Like Lambda-->" + (a + c));
return a + c;
};
interest.lambda(200,200); //()不可以省略
/*interest = a,c-> {
System.out.println("I Like Lambda-->" + (a + c));
return a + c;
};*/ interest = (a,c)-> {
return a + c;
}; interest = (a,c)->a+c; interest = (a,c)->100; System.out.println(interest.lambda(10,20)); } } interface IInterest {
int lambda(int a, int b);
} //外部类
class Interest implements IInterest { @Override
public int lambda(int a, int c) {
System.out.println("I Like Lambda-->" + (a + c));
return a + c;
}
}
5、多线程示例
package com.sxt.thread; /**
* lambda推导+参数+返回值
*/
public class LambdaTest04 { public static void main(String[] args) { new Thread(()->{
for (int i = 0; i <100 ; i++) {
System.out.println("123");
}
}).start(); new Thread(()->System.out.println("456")).start();
} }
lambda表达式推导和使用的更多相关文章
- Java 多线程 -- lambda 表达式推导
jdk 8 开始 java 引入了lambda 表达式. lambda适用场景: 1.接口或父类 2.接口或父类只有一个方法 我们从多线程写法来推导一下: 1.外部类写法: package com.x ...
- Python学习_列表推导和Lambda表达式
列表推导目的是减少将一个列表转换为另一个列表时所需编写的代码量,其功能也能用列表迭代完成 1.根据要求创建列表threes_and_fives(列表值包括1到15中能够被3或者5正常的数) three ...
- python---基础知识回顾(一)(引用计数,深浅拷贝,列表推导式,lambda表达式,命名空间,函数参数逆收集,内置函数,hasattr...)
一:列表和元组(引用计数了解,深浅拷贝了解) 序列:序列是一种数据结构,对其中的元素按顺序进行了编号(从0开始).典型的序列包括了列表,字符串,和元组 列表是可变的(可以进行修改),而元组和字符串是不 ...
- C++11之lambda表达式
lambda表达式源于函数式编程的概念,它可以就地匿名定义目标函数或函数对象,不需要额外写一个命名函数或者函数对象.lambda表达式的类型在C++11中被称为"闭包类型",也可以 ...
- Java Lambda表达式初探
Java Lambda表达式初探 前言 本文受启发于Trisha Gee在JavaOne 2016的主题演讲Refactoring to Java 8. Java 8已经发行两年多,但很多人仍然在使用 ...
- 深入浅出java 8 lambda表达式--零基础一分钟入门
lambda从使用上来说,第一感觉直白的理解就是,少了很多不必要的匿名回调类的写法,比如: public static void main(String[] args) { PlatformQuery ...
- C++11中的Lambda表达式
原文地址:C++中的Lambda表达式 作者:果冻想 一直都在提醒自己,我是搞C++的:但是当C++11出来这么长时间了,我却没有跟着队伍走,发现很对不起自己的身份,也还好,发现自己也有段时间没有写C ...
- Cocos2d-x v3.0 新的事件调度方法 lambda表达式的使用
欢迎添� Cocos2d-x 交流群: 193411763 转载请注明原文出处:http://blog.csdn.net/u012945598/article/details/24603251 Coc ...
- C++中的lambda表达式
1.基本形式: [捕获列表](参数列表){函数体}; 其中捕获列表和函数体不能省略但是捕获列表可以为空,也就是说最简单的lambda表达式是: []{}; 2.lambda表达式又叫匿名函数 ...
随机推荐
- sql_profile 固定SQL执行计划
使用 sql_profile 固定SQL执行计划 Table of Contents 1. 扯蛋 2. 利用SQL PROFILE固定执行计划 2.1. 查看原来语句的执行计划 2.2. 指定SQL使 ...
- jq 点击除了某元素以外的其他所有元素
$('body').click(function(e){ if(($(e.target).attr('class')!='header-top-nav-ipt')){ alert('除了class=h ...
- 机器学习:gensim之Word2Vec 详解
一 前言 Word2Vec是同上一篇提及的PageRank一样,都是Google的工程师和机器学习专家所提出的的:在学习这些算法.模型的时候,最好优先去看Google提出者的原汁Paper和Proje ...
- sh脚本实战
做了什么东西还是要尽快移动到博客上,不然回头看自己写的东西已经看不懂了... 凭着回忆+搜资料,把当初写sh脚本的过程写上来. 首先新建一个.sh文件,用vim就可以 在sh的第一行,写上 #!/bi ...
- Linux系统编程——基础命令总结
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/asialee_bird/article/ ...
- 【ABAP系列】【第六篇】SAP ABAP7.50 之隐式增强
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列][第六篇]SAP ABAP7.5 ...
- 【VS开发】【Linux开发】【DSP开发】如何截获以太网帧并解析
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- TCP和SSL TCP应用
TCP和SSL TCP应用 对于普通开发者而言编写TCP应用通讯是一件相对复杂的工作,毕竟需要一系列的bytes操作:如果再针对SSL的安全性处理相信会把很多普通开发者拒之门外.为了简化这一问题Bee ...
- 临时更换pip国内源
源 地址 阿里云 http://mirrors.aliyun.com/pypi/simple/ 豆瓣 http://pypi.douban.com/simple/ 清华大学 https://pypi. ...
- hadoop3.1.2启动和停止
1/ 启动 启动zookeeper: 三个节点上都zkServer.sh start 启动hdfs和yarn: 101上start-dfs.sh 102上start-yarn.sh 启动hive: ...