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表达式又叫匿名函数 ...
随机推荐
- [zookeeper]ZooInspector的使用
一.背景 Zookeeper作为常用的集群协调者组件被广泛应用,尤其是在大数据生态圈中: Zookeeper集群存储各个节点信息,包括:Hadoop.Hbase.Storm.Kafka等等: ...
- Log4j(详解)
Log4j: Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件, 甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护 ...
- 七十九:flask.Restful之flask-Restful蓝图与渲染模板
1.flask-Restful与蓝图结合使用如果要在蓝图中使用flask-Restful,那么在创建Api对象的时候,就不应该使用app,而是蓝图,如果有多个蓝图,则需在每一个蓝图里面创建一个Api对 ...
- kubernetes学习:CKA考试认证(二)
1. 它题的意思是 在 development 名称空间里面 找到名为 baz的 service 然后通过这个service的selector 找出 对应的pod . 要用 kubectl des ...
- spring boot系列(一)spring boot 初识
什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员 ...
- 利用Apache POI操作Excel
最近在做接口,有个功能是利用Excel导入汽车发动机所需零件信息到线上系统中.简单回顾一下之前学过的用java操作Excel. 1.maven配置Apache POI pom.xml中配置POIjar ...
- B/S结构-登录页面-测试用例设计
页面描述: 有一个登陆页面, 假如上面有2个textbox, 一个提交按钮 测试需求: 请针对这个页面设计30个以上的testcase 功能测试(Function test) 0. 什么都不输入,点击 ...
- PJzhang:查看你的微信、QQ、新浪微博都授权给过谁
猫宁!!! 个人信息的保护,需要时刻关注,不能有丝毫懈怠. 保护个人信息,有两个方向,一个是减少个人信息外泄,另一个是上传大量鱼龙杂的个人信息,难以分辨,混淆视听. 这里不谈第二个, ...
- Samba简单应用
一.Samba 简介 1.介绍 Samba(SMB是其缩写) 是一个网络服务器,用于Linux和Windows共享文件之用:Samba 即可以用于Windows和Linux之间的共享文件,也一样用于L ...
- 阿里云Zabbix安装实践过程
1.配置阿里云zabbix yum源 [root@VM_0_8_centos ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/3.0/rhe ...