Java基础00-Lamda表达式30
1. Lambda表达式
1.1 函数式编程思想概述
1.2 体验Lambda表达式
代码示例:
方式一就不演示了,可以去看Java基础24
方式2:
匿名内部类的方式改进
public class LambdaDemo {
public static void main(String[] args) {
// 匿名内部类的方式改进
new Thread(new Runnable() { @Override
public void run() {
System.out.println("多线程启动了!");
}
}).start();
}
}
运行结果:
方式3:
Lambda表达式的方式改进
public class LambdaDemo {
public static void main(String[] args) {
// Lambda表达式的方式改进
new Thread(() -> {
System.out.println("多线程启动了!");
}).start();
}
}
运行结果:

1.3 Lambda表达式的标准格式
两个方式做的是相同的事情,只不过Lambda表达式更加的简洁只做了我们要做的事情。
使用该方式更加关注的是要做的事情。
1.4 Lambda表达式的练习
1.4.1 练习1( 抽象方法无参)
代码示例:
这里采用的是Lambda表达式接口的方式,还可以使用常规的方式实现接口中的方法,也可以使用匿名内部类,但是这是三种方式Lambda表达式是最简洁的。
定义接口:
//1:定义一个接口(Eatable),里面定义一个抽象方法: void eat();
public interface Eatable {
void eat();
}
创建实现类:
//2:定义一一个测试类(EatableDemo),在测试类中提供两个方法
public class EatableDemo {
// 一个方法是主方法,在主方法中调用useEatable方法
public static void main(String[] args) {
// 调用useEatable方法
// 使用Lambda表达式
useEatable(() -> {
System.out.println("一天一苹果,医生远离我");
});
} // 一个方法是: useEatable(Eatable e)
public static void useEatable(Eatable e) {
e.eat();
}
}
运行结果:

1.4.2 练习2(抽象方法有参)
代码示例:
定义接口:
//1:定义一个接口(Flyable),里面定义一个抽象方法: void fly(String s);
public interface Flyable {
void fly(String s);
}
创建实现类:
使用了匿名内部类和Lambda方式,两个方法。
//2:定义一个测试类(FLyableDemo),在测试类中提供两个方法
//一个方法是: useFlyable(Flyable f)
//一个方法是主方法,在主方法中调用useFlyable方法
public class FlyableDemo {
public static void useFlyable(Flyable f) {
f.fly("风和日丽,晴空万里");
} private static void main(String[] args) {
// 匿名内部类
useFlyable(new Flyable() { @Override
public void fly(String s) { //这里的s是useFlyable方法定义的
System.out.println(s);
System.out.println("飞机自驾游");
}
});
System.out.println("-------------------");
// Lambda表达式
useFlyable((String s) -> {
System.out.println(s);
System.out.println("飞机自驾游");
});
}
}
1.4.3 练习3(抽象方法有参有返回值)
代码示例:
定义接口:
//1:定义一个接口(Addable),里面定义一个抽象方法: int add(int x, int y);
public interface Addable {
int add(int x, int y);
}
创建测试类:
//2:定义一个测试类(AddableDemo),在测试类中提供两个方法
// 一个方法是: useAddable(Addable a)
// 一个方法是主方法,在主方法中调用useAddable方法
public class AddableDemo { public static void main(String[] args) {
useAddable((int x, int y) -> {
return x + y;
});
} private static void useAddable(Addable a) {
int add = a.add(10, 20);
System.out.println(add);
}
}
运行结果:

1.5 Lambda表达式的省略模式
代码示例:
Addable接口,int类型有参有返回值
public interface Addable {
int add(int x, int y);
}
Flyable接口,String类型有参无返回值
public interface Flyable {
void fly(String s);
}
测试类:
public class LambdaDemo {
public static void main(String[] args) {
// 在这里只使用Lambda方式 // useAddable(Addable a)方法
// 常规方式
useAddable((int x, int y) -> {
return x + y;
});
// 参数的类型可以省略,但是有多个参数的情况下不能就省略一个
useAddable((x, y) -> {
return x + y;
});
System.out.println("----------------------");
// useFlyable(Flyable f)方法
// 常规方法
useFlyable((String s) -> {
System.out.println(s);
});
// 省略参数类型
useFlyable((s) -> {
System.out.println(s);
});
// 如果代码块的语句只有一条,可以省略大括号和分号
useFlyable(s -> System.out.println(s));
// 如果代码块的语句只有一条,可以省略大括号和分号,如果有return,return也要省略掉
useAddable((x, y) -> x + y);
} private static void useFlyable(Flyable f) {
f.fly("风和日丽,晴天万里");
} private static void useAddable(Addable a) {
int i = a.add(10, 20);
System.out.println(i);
}
}
运行结果:
方法都可以正常运行
1.6 Lambda表达式的注意事项
public class LambdaDemo01 {
public static void main(String[] args) { // 这样写是会报错的,因为没有上下文环境
// () -> System.out.println("Lambda表达式"); // 必须有上下文环境,才能推导出Lambda对应的接口
// 根据局部变量的赋值得知L ambda对应的接口:
Runnable r = () -> System.out.println("Lambda表达式");
// 根据调用方法的参数得知L ambda对应的接口:
new Thread(() -> System.out.println("Lambda表达式")).start();
}
}
1.7 Lambda表达式和匿名内部类的区别
Lambda表达式:只能是接口
Java基础00-Lamda表达式30的更多相关文章
- Java基础(00)
Java发展史 Java之父:詹姆斯.高斯林(James Gosling). SUN(Stanford University Network 斯坦福大学网络公司)产物. 1995年5月23日,java ...
- JAVA基础——运算符和表达式
JAVA语言常用的运算符和表达式详解 一.简述 运算符是一种"功能"符号,用以通知 Java 进行相关的运算.譬如,我们需要将变量 age 的值设置为 20 ,这时候就需要一个&q ...
- 实验二 Java基础(数据/表达式、判定/循环语句)
实验二 (一)实验内容 编写简单的计算器,完成加减乘除模运算. 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出. 编写测试代码,测试验证. ...
- [Java 基础]运算符和表达式
Java运算符 (1)赋值操作符 赋值操作符(=)表示:取右边的值(即右值),把它复制给左边(即左值). 右值可以是任意的常量.变量或表达式(只要可以生成一个值). 左值必须是一个明确的.已命名的变量 ...
- Java基础---Java---正则表达式-----匹配、切割、替换、获取等方法
正则表达式:符合一定规则的表达式 作用:用于专门操作字符串 特点:用于一些特定的符号来表示一些代码操作,这样就简化书写,主要是学习一些特殊符号的使用 好处:可以简化对字符串的复杂操作. 弊端:符号定义 ...
- Java基础学习总结(30)——Java 内存溢出问题总结
Java中OutOfMemoryError(内存溢出)的三种情况及解决办法 相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各 ...
- Java基础教程——Lambda表达式
Lambda表达式 Java8引入Lambda表达式,可以使代码更简洁. 格式:参数,箭头,代码 (参数名)->{代码} Lambda表达式体现了"函数式编程思想"-- 面向 ...
- Java基础语法-Lambda表达式
1.Lambda表达式主要用于简写接口的操作等出现匿名内部类的地方,如下:我这里先定义一个Swim接口,以及它所定义的swim()方法 interface Swim{ void swim(); } 2 ...
- Java基础教程(8)--表达式、语句和块
一.表达式 表达式由变量和运算符组成.下面是一个简单的赋值表达式: a = 0; 表达式都具有运算结果,因为赋值表达式的运算结果是左侧操作数的值,因此上面的表达式将会返回一个0.可以使用简单的 ...
- java中的lamda表达式
List操作: 循环: list.forEach((p) -> System.out.printf("%s %s; %n", p.getFirstName(), p.getL ...
随机推荐
- 向量算子优化Vector Operation Optimization
向量算子优化Vector Operation Optimization 查看MATLAB命令View MATLAB Command 示例显示Simulink编码器 ,将生成向量的块输出,设置为标量,优 ...
- 【NX二次开发】获得屏幕矩阵并设置WCS为屏幕方向
说明:获得屏幕矩阵并设置WCS为屏幕方向(Z朝向自己,X轴朝右,Y轴超上). 方法: 1 extern DllExport void ufusr(char *param, int *retcode, ...
- 腾讯TencentOS 十年云原生的迭代演进之路
导语 TencentOS Server (又名 Tencent Linux 简称 Tlinux) 是腾讯针对云的场景研发的 Linux 操作系统,提供了专门的功能特性和性能优化,为云服务器实例中的应用 ...
- centos 7 iotop 安装
安装指令:yum -y install iotop 指定查看aubunt 用户的读写状态:iotop -u aubunt -P -k -t 允许在非交互模式下每隔3秒刷新一次,只刷新6次:iotop ...
- spring赌上未来的一击:WebFlux性能实测
最近花了一点时间系统的测试验证了在SpringBoot框架下使用SpringMVC和Spring WebFlux两种框架开发接口,对比了响应时间以及压测吞吐量的区别. WebFlux&Spri ...
- 别再说Java对象都是在堆内存上分配空间的了!
Java作为一种面向对象的,跨平台语言,其对象.内存等一直是比较难的知识点,所以,即使是一个Java的初学者,也一定或多或少的对JVM有一些了解.可以说,关于JVM的相关知识,基本是每个Java开发者 ...
- 【Javascript + Vue】实现随机生成迷宫图片
前言 成品预览:https://codesandbox.io/s/maze-vite-15-i7oik?file=/src/maze.js 不久前写了一篇文章介绍了如何解迷宫:https://www. ...
- CMake 两种变量原理
目录 [TOC] 1.两种变量的定义参考 2.两种变量的作用域原理及使用 1.Normal Variables (1).包含 add_subdirectory().function().(本质是值拷贝 ...
- [.NET大牛之路 002] 什么是 .NET
.NET 是一个开发平台,或者叫开发者平台.使用 .NET 你可以创建不同类型的应用程序,使用多种开发语言.编辑器和工具库创建网页.手机.桌面以及游戏等应用.其核心特点是:免费.开源和跨平台. 语言和 ...
- Kubernetes的资源管理
本节讲解为一个pod配置资源的预期使用量和最大使用量.通过设置这两组参数,可以确保pod公平地使用Kubernetes集群资源,同时也影响着整个集群pod的调度方式. 1.为pod中的容器申请资源 创 ...