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. 编译器移植到.NET Core失败记录和对.NET未来感想

    .NET Core是微软力推的新平台,影响力好像还越来越大.为了对这一行业趋势有所准备,最近把自己搞的编程语言的编译器从.NET移植.NET Core,以实现跨平台在Linux上运行,然而失败了. 原 ...

  2. Activiti组任务

    一.Candidate-users候选人 1.需求 在流程定义中在任务节点的assignee固定设置任务负责人,在流程定义时将参数者固定设置在.bpmn文件中,如果临时任务负责人变更则需要修改流程定义 ...

  3. python数据分析工具 | matplotlib

    不论是数据挖掘还是数学建模,都免不了数据可视化的问题.对于 Python 来说,matplotlib 是最著名的绘图库,它主要用于二维绘图,当然也可以进行简单的三维绘图.它不但提供了一整套和 Matl ...

  4. B 火车

    时间限制 : 10000 MS   空间限制 : 565536 KB 评测说明 : 1.5s,512m 问题描述 A 国有n 个城市,城市之间有一些双向道路相连,并且城市两两之间有唯一路径.现在有火车 ...

  5. python--匿名函数、文件操作

    一.匿名函数 语法: sum = lambda arg1, arg2: arg1 + arg2 #调用sum函数 print "Value of total : ", sum( 1 ...

  6. 一天学一个Linux命令:第二天 cd pwd

    文章更新于:2020-03-08 注:本文参照 man pwd 手册,并给出使用样例. 文章目录 一.命令之 `cd` 和 `pwd` 1.命令介绍 2.语法格式 3.使用样例 4.pwd 参数 5. ...

  7. 如果你的 pip 命令不能用,你可以这样解决

    文章更新于:2020-04-05 注:如果想了解 pip 参数的使用参见:pip 命令参数以及如何配置国内镜像源 如何解决 pip 不能用的问题 一.你可能会遇到的问题 1.检查你敲命令的位置 2.如 ...

  8. String 对象-->split() 方法

    1.定义和用法 split() 方法用于把一个字符串分割成字符串数组. 语法: string.split(separator,limit) 参数: separator:可选.字符串或正则表达式,从该参 ...

  9. Git中rebase失败了如何进行恢复

    rebase失败后的恢复 记一次翻车现场 记一次翻车的现场,很早之前提的PR后面由于需求的变便去忙别的事情了,等到要做这个需求的我时候,发现已经 落后版本了,并且有很多文件的冲突,然后就用rebase ...

  10. Linux C++ 网络编程学习系列(7)——mbedtls编译使用

    mbedtls编译使用 环境: Ubuntu18.04 编译器:gcc或clang 编译选项: 静态编译使用 1. mbedtls源码 下载地址: https://github.com/ARMmbed ...