jdk 8 开始 java 引入了lambda 表达式。

lambda适用场景:

1、接口或父类

2、接口或父类只有一个方法

我们从多线程写法来推导一下:

1、外部类写法:

package com.xzlf.thread;
/**
* Lambda 表达式推导一:外部类
* @author xzlf
*
*/
public class LambdaTest01 {
public static void main(String[] args) {
ThreadA ta = new ThreadA();
new Thread(ta).start();
}
} class ThreadA implements Runnable{ @Override
public void run() {
System.out.println("外部类");
}
}

运行结果:

2、静态内部类写:

package com.xzlf.thread;
/**
* Lambda 表达式推导二: 静态内部类
* @author xzlf
*
*/
public class LambdaTest02 {
public static void main(String[] args) {
ThreadA ta = new ThreadA();
new Thread(ta).start();
} static class ThreadA implements Runnable{ @Override
public void run() {
System.out.println("静态内部类");
}
}
}

运行结果:

3、局部内部类写法:

package com.xzlf.thread;
/**
* Lambda 表达式推导三:局部内部类
* @author xzlf
*
*/
public class LambdaTest03 {
public static void main(String[] args) {
class ThreadA implements Runnable{ @Override
public void run() {
System.out.println("静态内部类");
}
} ThreadA ta = new ThreadA();
new Thread(ta).start();
} }

运行结果:

4、匿名内部类写法:

package com.xzlf.thread;
/**
* Lambda 表达式推导四:匿名内部类
* @author xzlf
*
*/
public class LambdaTest04 {
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("匿名内部类");
}
}).start();
}
}

运行结果:

5、lambda表达式:省略接口名 和 方法名

package com.xzlf.thread;
/**
* Lambda 表达式推导五:lambda 表达式 :省略接口名 和 方法名
* @author xzlf
*
*/
public class LambdaTest06 {
public static void main(String[] args) {
new Thread(() -> {
System.out.println("匿名内部类");
}).start();
}
}

运行结果:

6、lambda表达式 :省略大括号(方法内只有一行代码):

package com.xzlf.thread;
/**
* Lambda 表达式推导六:lambda 表达式 :省略大括号
* @author xzlf
*
*/
public class LambdaTest05 {
public static void main(String[] args) {
new Thread(() -> System.out.println("lambda 简化")).start();
}
}

运行结果:

7、lambda表达式带参数写法:

package com.xzlf.thread;
/**
* Lambda 表达式推导七:lambda 表达式 :省略接口名 和 方法名
* @author xzlf
*
*/
public class LambdaTest07 {
public static void main(String[] args) {
ILike like = (String name) -> {
System.out.println("i like " + name);
};
like.like("lambda");
}
} interface ILike{
void like(String name);
}

运行结果:

8、lambda表达式带参数简化写法:

方法只有一个lambda会自动匹配参数类型,可以省略参数类型和大括号:

public class LambdaTest07 {
public static void main(String[] args) {
ILike like = (name) -> System.out.println("i like " + name); like.like("lambda");
}
} interface ILike{
void like(String name);
}

运行结果:

9、lambda表达式带参数和返回值写法:

一样的,方法只有一个,且方法内只有一条语句时,可以省略参数类型和大括号以及 return 关键字;

public class LambdaTest07 {
public static void main(String[] args) {
Count c = (a, b) -> a + b;
int sum = c.add(10, 20);
System.out.println(sum); }
} interface Count{
int add(int a, int b);
}

运行结果:

Java 多线程 -- lambda 表达式推导的更多相关文章

  1. 深入浅出 Java 8 Lambda 表达式

    摘要:此篇文章主要介绍 Java8 Lambda 表达式产生的背景和用法,以及 Lambda 表达式与匿名类的不同等.本文系 OneAPM 工程师编译整理. Java 是一流的面向对象语言,除了部分简 ...

  2. 转载:深入浅出 Java 8 Lambda 表达式

    原文地址:http://viralpatel.net/blogs/Lambda-expressions-java-tutorial/ OneAPM for Java 能够深入到所有 Java 应用内部 ...

  3. Java 8 Lambda表达式

    Java 8 Lambda表达式探险 http://www.cnblogs.com/feichexia/archive/2012/11/15/Java8_LambdaExpression.html 为 ...

  4. Java 8 Lambda表达式10个示例【存】

    PS:不能完全参考文章的代码,请参考这个文件http://files.cnblogs.com/files/AIThink/Test01.zip 在Java 8之前,如果想将行为传入函数,仅有的选择就是 ...

  5. Java 8 Lambda 表达式

    Lambda 是啥玩意 简单来说,Lambda 就是一个匿名的方法,就这样,没啥特别的.它采用一种非常简洁的方式来定义方法.当你想传递可复用的方法片段时,匿名方法非常有用.例如,将一个方法传递给另外一 ...

  6. Java 8 lambda表达式示例

    例1.用lambda表达式实现Runnable 我开始使用Java 8时,首先做的就是使用lambda表达式替换匿名类,而实现Runnable接口是匿名类的最好示例.看一下Java 8之前的runna ...

  7. Java 8 Lambda 表达式详解

    一.Java 8 Lambda 表达式了解 参考:Java 8 Lambda 表达式 | 菜鸟教程 1.1 介绍: Lambda 表达式,也可称为闭包,是推动 Java 8 发布的最重要新特性. La ...

  8. 用Java 8 Lambda表达式实现设计模式:命令模式

    在这篇博客里,我将说明如何在使用 Java 8 Lambda表达式 的函数式编程方式 时实现 命令 设计模式 .命令模式的目标是将请求封装成一个对象,从对客户端的不同类型请求,例如队列或日志请求参数化 ...

  9. Java基础学习总结(44)——10个Java 8 Lambda表达式经典示例

    Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Ja ...

随机推荐

  1. SpringBoot系列之缓存使用教程

    介绍SpringBoot项目中使用缓存,之前先介绍一下Spring的缓存抽象和JSR107,本博客是我在学习尚硅谷视频和参考其它博客之后做的笔记,仅供学习参考 @ 目录 一.Spring的缓存抽象 1 ...

  2. Python第十一章-常用的核心模块01-collections模块

    python 自称 "Batteries included"(自带电池, 自备干粮?), 就是因为他提供了很多内置的模块, 使用这些模块无需安装和配置即可使用. 本章主要介绍 py ...

  3. nodejs使用express中静态资源托管(express.static())时遇到的bug

    如下:将test.html的页面挂载在服务器上, const express= require('express') const fs= require('fs') let app = express ...

  4. AssociatedObject

    在 Objective-C 中可以通过 Category 给一个现有的类添加属性,但是却不能添加实例变量,值得庆幸的是,我们可以通过 Associated Objects 来弥补这一不足. 在阅读本文 ...

  5. python项目依赖的生成与使用

    1.cd到相关项目下并创建虚拟环境 ~$ pipenv install --dev 2.激活虚拟环境 ~$ pipenv shell 3.执行命令 ~$ pip freeze > require ...

  6. 使用kibana操作elasticsearch7.x 教程

    由于elasticsearch7.x取消了type(类型的概念)对应数据库表的概念 添加一个索引 PUT 索引名 { "settings": { "number_of_s ...

  7. XDebug的配置和使用

    简介 XDebug是一个开放源代码的PHP程序调试器(即一个Debug工具) 可以用来跟踪,调试和分析PHP程序的运行状况 功能强大的神器,对审计有非常大的帮助. 官网:http://www.xdeb ...

  8. Keil5新建STM32工程(库函数版本)

    1.下载keil5教程参考:https://blog.csdn.net/qq_36854651/article/details/82632931 2.安装完keil5后,创建一个空的目录存放工程 3. ...

  9. Taro Next H5 跨框架组件库实践

    作者:凹凸曼 - JJ Taro 是一款多端开发框架.开发者只需编写一份代码,即可生成各小程序端.H5 以及 React Native 的应用. Taro Next 近期已发布 beta 版本,全面完 ...

  10. CVPR 2020论文收藏(转知乎:https://zhuanlan.zhihu.com/p/112337176)

    CVPR 2020 共收录 1470篇文章,根据当前的公布情况,人工智能学社整理了以下约100篇,分享给读者. 代码开源情况:详见每篇注释,当前共15篇开源.(持续更新中,可关注了解). 算法主要领域 ...