flash代码做网站教程,软件开发项目管理论文,wordpress段落间距调整,室内装修公司哪家好一.lambda表达式 1.lambda表达式简介
lambda表达式不能独立执行#xff0c;因此必须实现函数式接口#xff0c;并且会返回一个函数式接口的对象。
语法#xff1a;
()-结果表达式 参数-结果表达式 (参数1#xff0c;参数2#xff0c;...#xff0c;参数n)-因此必须实现函数式接口并且会返回一个函数式接口的对象。
语法
()-结果表达式 参数-结果表达式 (参数1参数2...参数n)-结果表达式 lambda表达式也可以实现复杂方法将操作符右侧的结果表达式换成代码块即可。语法
()-{代码块} 参数-{代码块} (参数1参数2...参数n)-{代码块} 功能归纳 () - {代码块} 这个方法 按照 这样的代码来实现 2.lambda表达式实现函数式接口
1函数式接口 指的是仅包含一个抽象方法的接口接口中的方法简单明了地说明了接口的用途。
interface MyIterface{ void method(); } 2lambda表达式实现无参抽象方法 很多函数式接口的抽象方法是无参数的。 3lambda表达式实现有参抽象方法 lambda表达式中可以用“(a1,a2,a3)”的方法表示有参抽象方法圆括号里标识符对应抽象方法的参数。如果抽象方法中只有一个参数lambda表达式则可以省略圆括号。
4lambda表达式使用代码块
当函数式接口的抽象方法需要实现复杂逻辑而不是返回一个简单的表达式的话就需要在lambda表达式中使用代码块。lambda表达式会自动判断返回值类型是否符合抽象方法的定义。
【例14.3】使用lambda表达式为考试成绩分类 结果
3.lambda表达式调用外部变量 1lambda表达式无法更改局部变量 局部变量在lambda表达式中默认定义为final静态的也就是说lambda表达式只能调用局部变量却不能改变其值。 2lambda表达式可以更改类成员变量 类成员变量是在lambda表达式中不是被final修饰的所以lambda表达式可以改变其值。
总结
1.lambda表达式可以调用并修改类成员变量的值。
2.lambda表达式只是描述了抽象方法是如何实现的在抽象方法没有被调用前lambda表达式中的代码并没有被执行所以运行抽象方法之前类成员变量的值不会发生变化。
3.只要抽象方法被调用就会执行lambda表达式中的代码类成员变量的值就会被修改。
二.方法的引用 1.引用静态方法 语法
类名静态方法名 这个语法中出现了一个新的操作符“”这是由两个英文冒号组成的操作符冒号之间没有空格。这个操作符左边表示方法所属的类名右边是方法名。需要注意的是这个语法中方法名是没有圆括号的。 2.引用成员方法 语法
对象名成员方法名 与引用静态方法语法不同这里操作符左侧的必须是一个对象名而不是类名。这种语法也可以达到抽象方法按照类成员方法逻辑来实现的目的。
【例14.8】使用lambda表达式引用成员方法
代码 结果 3.引用带泛型的方法 泛型是Java开发经常使用到的功能“”操作符支持引用带泛型的方法。除方法外“”操作符也支持引用带泛型的类。 4.引用构造方法 1引用无参构造方法 语法
类名new 2引用有参构造方法 例代码
结果
3引用数组构造方法
语法
类名[]::new 三.流处理
流处理有点类似数据库的SQL语句可以执行非常复杂的过滤、映射、查找和收集功能并且代码量很少。 【例14.14】创建员工类并按照表14.2创建初始化数据
代码 1.数据过滤 filter()方法是Stream接口提供的过滤方法。该方法可以将lambda表达式作为参数然后按照lambda表达式的逻辑过滤流中的元素。过滤出想要的流元素后还需使用Stream提供的cllect()方法按照指定方法重新封装。
limit()方法是Stream接口提供的方法该方法可以获取流中前N个元素。
【例】找出年龄大于30的员工并限制条数 代码
结果
2.数据收集 数据统计不仅可以筛选出特殊元素还可以对元素的属性进行统计计算由Collectors收集器实现。
数据分组就是将流中元素按照指定的条件分开保存类似SQL语言中的“GROUP BY”关键字。
Collectors类提供的groupingBy()方法就是用来进行分组的方法。
【例14.28】将所有员工按照部门分组 代码
结果