Java基础00-Lamda表达式30
2024-08-25 21:29:42
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表达式:只能是接口
最新文章
- 源码安装php
- 疯狂Android讲义 - 学习笔记(五)
- iOS 模拟器变的很多的问题
- 在活动中使用Menu
- JAVA多线程(二)
- myeclipse里装svn插件
- C++程序设计实践指导1.15找出回文数改写要求实现
- 李维作答 《insideVCL》——李维实在很勤奋,而且勇于突破,从不以旧的内容充数
- Java笔记:Java集合概述和Set集合
- 进程通信-SendMessage使用方法
- Linux指令--kill
- python屏幕的交互(读取输出信息)input,raw_input的区别
- sql sever基本命令
- kylin 系列(一)安装部署
- Linux内核分析 读书笔记 (第五章)
- js常用函数的封装
- RESTful接口规范
- Java Web(四) 一次性验证码的代码实现
- .net根据经纬度获取地址(百度api)
- mac os 启动服务命令 launchctl
热门文章
- Springboot单元测试@RunWith注解
- 批量执行异步任务CompletionService
- 【Azure Developer】使用 Python SDK连接Azure Storage Account, 计算Blob大小代码示例
- 基于区域的CNN(R-CNN)
- C#将DataTable数据导出CSV文件
- Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://dubbo.apache.org/schema/dubbo]
- Linux芯片驱动之SPI Controller
- 二、创建测试JSP页面
- 树莓派写入openwrt作为路由器
- javascript之一切都是对象