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表达式推导和使用的更多相关文章

  1. Java 多线程 -- lambda 表达式推导

    jdk 8 开始 java 引入了lambda 表达式. lambda适用场景: 1.接口或父类 2.接口或父类只有一个方法 我们从多线程写法来推导一下: 1.外部类写法: package com.x ...

  2. Python学习_列表推导和Lambda表达式

    列表推导目的是减少将一个列表转换为另一个列表时所需编写的代码量,其功能也能用列表迭代完成 1.根据要求创建列表threes_and_fives(列表值包括1到15中能够被3或者5正常的数) three ...

  3. python---基础知识回顾(一)(引用计数,深浅拷贝,列表推导式,lambda表达式,命名空间,函数参数逆收集,内置函数,hasattr...)

    一:列表和元组(引用计数了解,深浅拷贝了解) 序列:序列是一种数据结构,对其中的元素按顺序进行了编号(从0开始).典型的序列包括了列表,字符串,和元组 列表是可变的(可以进行修改),而元组和字符串是不 ...

  4. C++11之lambda表达式

    lambda表达式源于函数式编程的概念,它可以就地匿名定义目标函数或函数对象,不需要额外写一个命名函数或者函数对象.lambda表达式的类型在C++11中被称为"闭包类型",也可以 ...

  5. Java Lambda表达式初探

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

  6. 深入浅出java 8 lambda表达式--零基础一分钟入门

    lambda从使用上来说,第一感觉直白的理解就是,少了很多不必要的匿名回调类的写法,比如: public static void main(String[] args) { PlatformQuery ...

  7. C++11中的Lambda表达式

    原文地址:C++中的Lambda表达式 作者:果冻想 一直都在提醒自己,我是搞C++的:但是当C++11出来这么长时间了,我却没有跟着队伍走,发现很对不起自己的身份,也还好,发现自己也有段时间没有写C ...

  8. Cocos2d-x v3.0 新的事件调度方法 lambda表达式的使用

    欢迎添� Cocos2d-x 交流群: 193411763 转载请注明原文出处:http://blog.csdn.net/u012945598/article/details/24603251 Coc ...

  9. C++中的lambda表达式

    1.基本形式: [捕获列表](参数列表){函数体};     其中捕获列表和函数体不能省略但是捕获列表可以为空,也就是说最简单的lambda表达式是:  []{}; 2.lambda表达式又叫匿名函数 ...

随机推荐

  1. LC 413. Arithmetic Slices

    A sequence of number is called arithmetic if it consists of at least three elements and if the diffe ...

  2. js闭包解决多个点击事件

    <script> var severalObj=window.document.getElementsByName("button"); for(var i=0;i&l ...

  3. .net core 入门一

    官网教程:https://docs.microsoft.com/zh-cn/aspnet/core/getting-started/?view=aspnetcore-3.0&tabs=wind ...

  4. [笔记] Ubuntu 18.04安装Docker CE及NVIDIA Container Toolkit流程

    之前写的[笔记] Ubuntu 18.04安装Docker CE及nvidia-docker2流程已经out了,以这篇为准. Docker的好处之一,就是在Container里面可以随意瞎搞,不用担心 ...

  5. iOS检测用户截屏, 并获取所截图片

    // // ViewController.m // CheckScreenshotDemo // // Created by 思 彭 on 2017/4/25. // Copyright © 2017 ...

  6. shader飞线改进版

    项目github地址:https://github.com/ecojust/flyline 前面写过一个飞线(基于THREE.Line进行的颜色变化),只是简单地将可视区片元颜色的alpha通道值设为 ...

  7. WinRar制作安装包

    这次研究了下WinRar制作程序安装包,我使用的是5.21版本. 选中要打包的文件,先压缩为RAR文件,然后双击打开文件 输入目录时可以选择前两项,输入绝对路径时,则为第三项. 配置解压前运行的解压后 ...

  8. danbooru 图片下载工具。

    danbooru 是什么,查搜索引擎去吧. 试了四个站点 yande.re,konachan.com,danbooru.donmai.us,gelbooru.com ,其他就不知道了. 有的站点对搜索 ...

  9. 【Git】工作中99%能用到的git命令

    Git使用笔记 1.第一次使用github ============================================= 1)github注册账号 使用邮箱注册账号 先不要创建版本库 2 ...

  10. TensorFlow实战第三课(可视化、加速神经网络训练)

    matplotlib可视化 构件图形 用散点图描述真实数据之间的关系(plt.ion()用于连续显示) # plot the real data fig = plt.figure() ax = fig ...