1. Lambda表达式

Java8新特征之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的更多相关文章

  1. Java基础(00)

    Java发展史 Java之父:詹姆斯.高斯林(James Gosling). SUN(Stanford University Network 斯坦福大学网络公司)产物. 1995年5月23日,java ...

  2. JAVA基础——运算符和表达式

    JAVA语言常用的运算符和表达式详解 一.简述 运算符是一种"功能"符号,用以通知 Java 进行相关的运算.譬如,我们需要将变量 age 的值设置为 20 ,这时候就需要一个&q ...

  3. 实验二 Java基础(数据/表达式、判定/循环语句)

    实验二 (一)实验内容 编写简单的计算器,完成加减乘除模运算. 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出. 编写测试代码,测试验证. ...

  4. [Java 基础]运算符和表达式

    Java运算符 (1)赋值操作符 赋值操作符(=)表示:取右边的值(即右值),把它复制给左边(即左值). 右值可以是任意的常量.变量或表达式(只要可以生成一个值). 左值必须是一个明确的.已命名的变量 ...

  5. Java基础---Java---正则表达式-----匹配、切割、替换、获取等方法

    正则表达式:符合一定规则的表达式 作用:用于专门操作字符串 特点:用于一些特定的符号来表示一些代码操作,这样就简化书写,主要是学习一些特殊符号的使用 好处:可以简化对字符串的复杂操作. 弊端:符号定义 ...

  6. Java基础学习总结(30)——Java 内存溢出问题总结

    Java中OutOfMemoryError(内存溢出)的三种情况及解决办法 相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各 ...

  7. Java基础教程——Lambda表达式

    Lambda表达式 Java8引入Lambda表达式,可以使代码更简洁. 格式:参数,箭头,代码 (参数名)->{代码} Lambda表达式体现了"函数式编程思想"-- 面向 ...

  8. Java基础语法-Lambda表达式

    1.Lambda表达式主要用于简写接口的操作等出现匿名内部类的地方,如下:我这里先定义一个Swim接口,以及它所定义的swim()方法 interface Swim{ void swim(); } 2 ...

  9. Java基础教程(8)--表达式、语句和块

    一.表达式   表达式由变量和运算符组成.下面是一个简单的赋值表达式: a = 0;   表达式都具有运算结果,因为赋值表达式的运算结果是左侧操作数的值,因此上面的表达式将会返回一个0.可以使用简单的 ...

  10. java中的lamda表达式

    List操作: 循环: list.forEach((p) -> System.out.printf("%s %s; %n", p.getFirstName(), p.getL ...

随机推荐

  1. NVIDIA GPU上的Tensor线性代数

    NVIDIA GPU上的Tensor线性代数 cuTENSOR库是同类中第一个GPU加速的张量线性代数库,提供张量收缩,归约和逐元素运算.cuTENSOR用于加速在深度学习训练和推理,计算机视觉,量子 ...

  2. CSS 常见问题笔记

    CSS 常见问题 布局 一.盒模型宽度计算 问题:div1 的 offsetWidth 是多少? <style> #div1 { width: 100px; padding: 10px; ...

  3. oracle审计表迁移

    ============ oracle审计表迁移到新的表空间 ============ 前言 oracle数据库开启审计功能后会占用大量的SYSTEM系统表空间,要么定时对审计表进行清理,要么对系统表 ...

  4. RabbitMQ由浅入深入门全总结(一)

    写在最前面 距离上一次发文章已经很久了,其实这段时间一直也没有停笔,只不过在忙着找工作还有学校结课的事情,重新弄了一下博客,后面也会陆陆续续会把文章最近更新出来~ 这篇文章有点长,就分了两篇Q PS: ...

  5. C# —— 点击按钮动态打开ComboBox

    网上搜索了好多资料,大多是重绘ComboBox或者使用自定义控件创建一个全新的ComboBox(并非基于window的ComboBox). 对于菜鸟的我,实现太麻烦,有些代码理解起来困难,但是项目比较 ...

  6. CentOS 7服务管理

    CentOS 6 使用service 管理指令: service 服务名 [start | stop | restart | reload | status] 但在 CentOS7.0 后 不再使用 ...

  7. Pytorch CNN网络MNIST数字识别 [超详细记录] 学习笔记(三)

    目录 1. 准备数据集 1.1 MNIST数据集获取: 1.2 程序部分 2. 设计网络结构 2.1 网络设计 2.2 程序部分 3. 迭代训练 4. 测试集预测部分 5. 全部代码 1. 准备数据集 ...

  8. 学习响应式编程 Reactor (4) - reactor 转换类操作符(1)

    Reactor 操作符 数据在响应式流中的处理,就像流过一条装配流水线.Reactor 既是传送带,又是一个个的装配工或机器人.原材料从源头(最初的 Publisher )流出,经过一个个的装配线中装 ...

  9. 【题解】[LuoguP3503]「BZOJ2086」[POI2010] Blocks

    题目描述 给出N个正整数a[1..N],再给出一个正整数k,现在可以进行如下操作:每次选择一个大于k的正整数a[i],将a[i]减去1,选择a[i-1]或a[i+1]中的一个加上1.经过一定次数的操作 ...

  10. 关于DWG文件转换成PDF

    最近有这样一个需求,客户会提供DWG文件,因为DWG文件是不能直接在网页上显示的,所以必须对他做处理,要求是转换成PDF格式.我查了很久的资料,很多都是基于C#和.NET的方法,而且都是说的很模糊,不 ...