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 ...
随机推荐
- 快速人体姿态估计:CVPR2019论文阅读
快速人体姿态估计:CVPR2019论文阅读 Fast Human Pose Estimation 论文链接: http://openaccess.thecvf.com/content_CVPR_201 ...
- CUDA运行时 Runtime(三)
CUDA运行时 Runtime(三) 一.异步并发执行 CUDA将以下操作公开为可以彼此并发操作的独立任务: 主机计算: 设备计算: 从主机到设备的内存传输: 从设备到主机的存储器传输: 在给定设备的 ...
- Contos8 安装 MariaDb 时报错:Could not open mysql.plugin table: table mysql.plugin
导语: 因个人服务器误删了一些文件导致MariaDB崩溃,一直在报错,所以想着重装一下,没想到在重装后启动时再次报错(与之前报错不同),这次的报错原因大致是因为某些插件表找不到. 因此又开启了漫长的寻 ...
- QByteArray使用方法大全
QByteArray 在Qt中QByteArray可以看做是c语言中 char*的升级版本.我们在使用这种类型的时候可通过这个类的构造函数申请一块动态内存,用于存储我们需要处理的字符串数据. 下面给大 ...
- 『动善时』JMeter基础 — 44、JMeter对数据库的更新操作
目录 1.执行一条insert语句 2.insert语句实现参数化 3.一次执行多条insert语句 4.使用Beanshell生成加密数据示例 (1)测试计划内包含的元件 (2)JDBC连接配置组件 ...
- PTA题目集总结
PTA题目集1-3总结 一:前言 我认为题目集一的有八个题目,题量可能稍微有点多,但是题型较为简单,基本为入门题:题集二有五道题,题量适度,难度也适中:题集三虽然只有三道题,但是难度却骤然提升,前两题 ...
- spring + spring mvc + tomcat 面试题(史上最全)
文章很长,而且持续更新,建议收藏起来,慢慢读! 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 + 社群大片好评 < Java 高并发 三 ...
- 题解 P2257 YY的GCD
P2257 YY的GCD 解题思路 果然数论的题是真心不好搞. 第一个莫比乌斯反演的题,好好推一下式子吧..(借鉴了blog) 我们要求的答案就是\(Ans=\sum\limits_{i=1}^{n} ...
- HTTP Cookies知识-查看、发送、获取、返回
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 HTTP Cookies是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求 ...
- 『无为则无心』Python序列 — 17、Python字符串操作常用API
目录 1.字符串的查找 @1.find()方法 @2.index()方法 @3.rfind()和rindex()方法 @4.count()方法 2.字符串的修改 @1.replace()方法 @2.s ...