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 ...
随机推荐
- 自定义pass编写
自定义pass编写 TVM是一个框架,抽象了机器学习加速器的异质性.有时,用户可能需要自定义一些分析和IR转换,使TVM适应自己的专用硬件.本文可帮助用户在TVM中编写自定义pass. 先决条件 ...
- MindSpore技术理解(上)
MindSpore技术理解(上) 引言 深度学习研究和应用在近几十年得到了爆炸式的发展,掀起了人工智能的第三次浪潮,并且在图像识别.语音识别与合成.无人驾驶.机器视觉等方面取得了巨大的成功.这也对算法 ...
- Python 应用领域以及版本之间的区别
Python 应用领域以及版本之间的区别 一.Python应用领域 1. Python+人工智能,给你更多研究方向选择! 2. 企业级综合实战项目,集六大前沿技术为一体 二. Python 2与Pyt ...
- 反应式系统实现MQTT客户机
反应式系统实现MQTT客户机 Implementing an MQTT client for reactive systems MQTT Reactive是从LiamBindle的MQTT-C库派生的 ...
- SQL注入问题------JDBC编写简单登录代码
一.什么是sql注入 sql注入:用户输入的内容, 有一些sql的特殊关键字参与字符串的拼接,完成了一条逻辑发生变化的新的SQL语句 !用代码举个例子简单说明一下: package cn.zhbit. ...
- NOIP2018初赛普及组原题&题解
NOIP2018初赛普及组原题&题解 目录 NOIP2018初赛普及组原题&题解 原题&答案 题解 单项选择题 第$1$题 第$2$题 第$3$题 第$4$题 第$5$题 第$ ...
- NEXTCLOUD 常见错误
HTTP请求头"Strict-Transport-Security"没有配置为至少"15552000"秒出于增强安全性考虑推荐按照安全提示中的说明启用HSTS ...
- 【NX二次开发】图标图像
用户定义位图的目录位置的环境变量 UGII_BITMAP_PATH 在NX日志中查看NX图标需要设置的变量 变量名:PRINT_DIALOG_BITMAP_NAMES 变量值:1 查看系统图标的方法1 ...
- grep过滤空行和注释行
1)grep的排除选项为 -v排除空行的命令是:grep -v '^$' filename 2)排除以#注释的命令是:grep -v '^#' filename 3)结合起来就是,既排除空行又排除注释 ...
- 关于DWG文件转换成PDF
最近有这样一个需求,客户会提供DWG文件,因为DWG文件是不能直接在网页上显示的,所以必须对他做处理,要求是转换成PDF格式.我查了很久的资料,很多都是基于C#和.NET的方法,而且都是说的很模糊,不 ...