java8--Lambda表达式
目录
- 一、Java 8 Lambda表达式
- 1、出现的背景
- 2、Lambda表达式简介
- 3、Lambda 表达式的结构
- 4.什么是功能接口(Functional interface)
- 5、 Lambda 表达式的例子
一、Java 8 Lambda表达式
1、出现的背景
java是一流的面向对象语言,除了部分简单数据类型java中的一切都是对象,即使数组也是一种对象,每个类创建的实例也是对象。在java中定义的函数或方法不可能完全独立,也不能将方法作为参数或返回一个方法给实例。
- 首先回顾使用Arrays工具类的sort()方法,是升序排序
- 如果想让一个数组降序呢?采用sort方法中的compare( );对数组中的每个元素进行比较。
- 底层sort() 实现了comparator接口
- comparator接口中用compare方法进行比较
- 在实现比较接口的外部定义一个比较规则
public class StringCom implements Comparator<String> {@Overridepublic int compare(String o1, String o2) {return o2.compareTo(o1);}
}
- 进行降序排序
- 还可以定义一个内部类
/*内部类 不需要在外部创建类*/static class StringCom1 implements Comparator<String>{@Overridepublic int compare(String o1, String o2) {return o2.compareTo(o1);}}
- 降序排序
- 还可以定义一个匿名内部类,进行降序排序
- 在上面的例子中,对集合进行排序需要重新接口中的方法,来进行排序功能。在java里将普通方法或函数像参数一样传值并不简单,所以java8增加了Lambda表达式。
2、Lambda表达式简介
- lambda是匿名函数,一般在方法的参数为接口时,代替之前写的匿名内部类。语法为:(arg1, arg2…) -> { body };(a,b) 参数类型可以不写,可以自动类型推断
- 怎么推断?
- 要求接口中只能有一个抽象方法
- Lambda表达式的目的就是使用更少的代码来实现同样的功能。
3、Lambda 表达式的结构
- Lambda 表达式可以具有零个,一个或多个参数。
- 可以显式声明参数的类型,也可以由编译器自动从上下文推断参数的类型。例如 (int a,int b)与 (a,b)相同。
- 参数用小括号括起来,用逗号分隔。例如 (a, b) 或 (int a, int b) 或 (String a, int b, float c)。
- 空括号用于表示一组空的参数。例如 () -> 42。
- 当有且仅有一个参数时,如果不显式指明类型,则不必使用小括号。例如 a -> return a*a。
- Lambda 表达式的正文可以包含零条,一条或多条语句。
- 如果 Lambda 表达式的正文只有一条语句,则大括号可不用写,且表达式的返回值类型要与匿名函数的返回类型相同。
- 如果 Lambda 表达式的正文有一条以上的语句必须包含在大括号(代码块)中,且表达式的返回值类型要与匿名函数的返回类型相同。
4.什么是功能接口(Functional interface)
- 功能接口时java8中新增功能,只允许一个抽象方法。这些接口也称为单抽象方法接口。这些也可以使用 Lambda 表达式,方法引用和构造函数引用来表示。Java 8 也引入了一个注释,即@FunctionalInterface,当你注释的接口违反了 Functional Interface 的契约时,它可以用于编译器级错误。
- eg:监听事件addActionListener() 事件处理
JButton jButton =new JButton("按钮");//匿名内部类写法jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {}});//lambda写法jButton.addActionListener((e)->{System.out.println("aaaa");});
- ActionListener() 接口;它里面就是有一个抽象方法,虽然没有@FunctionalInterface注解;但是也符合Lambda表达式的规则;
5、 Lambda 表达式的例子
- 线程初始化
new Thread(new Runnable() {@Overridepublic void run() {}});new Thread(()->{System.out.println("Aaaa");});
-遍历输出
//一般方法List<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(5);for (Integer n : list) {System.out.println(n);}// 使用 Lambda 表达式list.forEach(n -> System.out.println(n));
java8--Lambda表达式相关推荐
- java8 lambda表达式实现自定义用户组件,Don't Repeat Yourself
2019独角兽企业重金招聘Python工程师标准>>> 一.用户组件的功能 使用java8 lambda表达式实现实现世界的一个例子:用户组件.此用户组件有以下几个操作:获取用户列表 ...
- Java8————Lambda表达式(二)
译者注:文中内容均来自于官方教程<Lambda Expressions>,但是由于英汉语言的差异,部分语句官方描述过于冗余,因此译者根据通常状况的理解做了微调,但不会影响表达的含义.比如: ...
- lambda 对象去重_采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集...
采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...
- lambda学习视频和stream学习视频(Java8 Lambda表达式视频教程)-Java爬虫-网络购物的正确打开方式
百度网盘 链接:https://pan.baidu.com/s/1upU5EVXOQeho6poDYdnhiQ 提取码:088l Java8 Lambda表达式视频教程 https://www.bil ...
- Java8 lambda表达式,Comparator.comparing().thenComparing()报错
环境 Java:1.8+ 前言 今天发了一个问题: 问题描述: 对List进行排序,如果在Comparator.comparing()方法中,只使用一个字段排序,没有问题. 但是如果使用多字段排序,并 ...
- 采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集
采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...
- Java8 Lambda表达式详解手册及实例
先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号"程序新视界",好好系列的学习一下 ...
- Java8 lambda表达式10个示例
例1.用lambda表达式实现Runnable // Java 8之前: new Thread(new Runnable() { @Override public void run() ...
- java8 lambda 视频_一文搞懂Java8 Lambda表达式(附带视频教程)
Lambda表达式介绍 Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁.通过Lambda表达式,可以替代我们以前经常写的匿名内部类来实现接口.Lambda表达式本质是一个 ...
- java8 lambda python_【学习笔记】java8 Lambda表达式语法及应用
本文是慕课网大牧莫邪老师的视频教程一课掌握Lambda表达式语法及应用的学习笔记.如果觉得内容对你有用,可以购买老师的课程支持一下,课程价格1元,十分良心了. 1. 课程介绍 2. 为什么引入Lamb ...
最新文章
- andoridView修改
- Java的应用领域有哪些呢?分享这几个
- H3C S5120-52P-WiNet交换机配置
- 顺序表查找+折半查找(二级)
- Maven 加载ojdbc14.jar报错,解决方法
- 逐步优化求解最大子序列和
- 谷歌云使用账号密码_如何使用Google密码检查
- 博客侧栏添加恋爱计时框
- “Git 不是昙花一现!”
- (PPT)Linux服务器基础
- 433MHz LoRa/FSK 无线频谱波形分析(频谱分析仪测试LoRa/FSK带宽、功率、频率误差等)
- ESC/POS协议打印机工具类(java)
- 汽车电工及电子技术基础【3】
- learning bamboo flute
- 学习管理系统 LMS
- 微型计算机usb接口工作方式,一种微型计算机的制作方法
- hive中文繁简转化opencc4j
- Buffer Pool Manager
- 电子数据取证之Android APK分析
- HDU 5476 Explore Track of Point 几何题 —— 2015 ACM/ICPC Asia Regional Shanghai Online
热门文章
- 记录:The field files exceeds its maximum permitted size of 1048576 bytes...解决方案【亲测有效】
- Redis 列表(List) Redis Lpush 命令
- Kodi Couldn't Connect to Network Server
- 计算机会考题 荷花,小小量词我来填。一()车厢一()纠纷一()荷花一()谜语一()考试一()皮球...
- 常用0x000000类型颜色代码表
- 苹果笔记本如何打开计算机,苹果笔记本如何进入BIOS设置 Mac怎么设置BIOS
- 黑马程序员培训没兄弟会高级
- 小程序18问,3分钟快速了解小程序
- python去掉左边的空格_Python去除字符串左边空格
- 关于EPCS系列芯片的说明