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表达式又叫匿名函数 ...
随机推荐
- Struts2常量_Action配置路径_通配符
Struts2中常用的常量 指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法 和freemarker .velocity的输出 <cons ...
- Tag 标签
用于标记和选择. 基础用法 由type属性来选择tag的类型,也可以通过color属性来自定义背景色. <el-tag>标签一</el-tag> <el-tag type ...
- C++异常实现机制
1.C函数的调用和返回 要理解C++异常机制实现之前,首先要了解一个函数的调用和返回机制,这里面就要涉及到ESP和EBP寄存器.我们先看一下函数调用和返回的流程. 下面是按调用约定__stdcall ...
- mssql表分区
1:表分区 什么是表分区一般情况下,我们建立数据库表时,表数据都存放在一个文件里.但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小 ...
- MySQL数据表列转行
简单例子 数据结构如下 use dataTest create table t_score ( name ) , subject ), grade ,) ) INSERT INTO `t_score` ...
- 六十:Flask.Cookie之flask设置cookie的有效域名
设置cookie有效域名cookie默认只能在主域名下使用,如果要在子域名下使用,则应该给set_cookie设置属性domain='.主域名',此时,此cookie在此主域名下的所有子域名均有效 f ...
- Idea Debug多线程不进断点问题处理
Idea也会使我狼狈不堪,Eclipse下约定成俗,却非Idea的默认规则. 比如 DEBUG多个线程时,Idea的默认设定就会遇到断点不能进入的问题. 解决的方法: 点击DEBUF框下的双红点(Vi ...
- docker pull / docker login 报错 Error response from daemon: Get https://registry-1.docker.io/v2/: x509
docker pull 和 docker login 的时候报错 Error response from daemon: Get https://registry-1.docker.io/v2/: x ...
- 【AMAD】django-filer -- 一个管理文件和图片的django app
动机 简介 个人评分 动机 django-filer1可以让你像一些云存储一样使用WEB UI控制你的文件. 简介 下面是前端图片:   个人评分 类型 评分 实用性 ⭐️⭐️⭐️⭐️ 易用性 ⭐ ...
- 5分钟了解图数据库Neo4j的使用
1.图数据库安装与配置 1.1安装与配置 配置path = %NEO4J_HOME%\bin 启动命令:neo4j console web访问:http://localhost:7474 1. ...