一.Lambda表达式

一种代码简洁又抽象的表达方式,它能够在一个方法要调用某个接口的抽象方法前,对其要调用的抽象方法实现重写.

1.Lambda使用条件


1.必须要保证它是某个接口中唯一的一个抽象方法.即:无法用于存在多个抽象方法的接口
如:

interface InterA{void show();//Lambda表达式之 不带形参不带返回值的接口抽象方法
}

2.要有一个方法或一个对象/类的小括号’()'作为参数,让lambda的表达式填入其中.
如果是方法,则该方法必须同接口的抽象方法存在联系,比如该方法调用了接口的抽象方法
:

  public static void methodA(InterA a){a.show();}

Lambda标准格式:

方法名/对象名/new 类名((形参可选) -> {//代码块(重写)
} );

列如:

  methodB((String str)->{System.out.println("methodB方法内,它用过'show'方法传递的字符串内容为:"+str);System.out.println("这里,我们其实已经重写了show方法,但重写是重写代码块儿,而并非是连同形参内容也给重写了");System.out.println("因此可以调用methodB方法中,给'show'传递的形参's'");});

2.Lambda的省略格式


省略规则一:当重写方法块仅一行代码时,可以省略大括号’{}’,当无参数时,不可以省略小括号’()'
格式:方法名/对象名/new 类名(() -> //代码块);
列如:methodA(() -> System.out.println("因为只有一行代码,在使用lambda表达式重写并实现某个抽象方法时,可以省略大括号"));
省略规则二:如果参数只有一个,可以省略括号’()’,仅写参数名即可.
注意:当重写方法没有参数时,小括号’()'不能省略

格式:方法名/对象名/new 类名(唯一参数-> //代码块);
列如: methodB(s-> System.out.println("重写方法,并打印's'字符串形参的内容:"+s));
省略规则三:可以省略参数类型,只填写参数名或者是其对应的数据,
注意:不可以单独省略某个参数的类型,要么都省略掉类型,要么都不省略.

格式:方法名/对象名/new 类名((参数1,参数2)-> //代码块);
列如:methodC((a,b)-> System.out.println("方法形参a的数值为"+a+",b的数值为"+b+",总和为"+(a+b)));
省略规则三:如果方法有返回值,且只有一行代码因而想要省略’大括号’的话,那么需要省略 其’return’单词.
格式:方法名/对象名/new 类名((参数)-> //return代码块);
列如:methodD((a,b)-> a+b);

二.方法引用

比较晦涩难懂,其实是程序根据你需要重写的内容和需求,将其送给Object或其子类/实现类中能够实现相似作用的类去实现.
即:将一个需求抛给一个已经存在的解决方案,可以是此前你自己写的类和方法,也可以是jdk中已有的类和方法.

1.引用类的静态方法


格式:方法名/对象名/new 类名(已知类::其类中的静态方法);
列如:methodLoadB(Math::max);

2.引用对象的成员方法

步骤1/ new对象
格式:对象类名 自定义对象名 = 对象类名(参数可选);
列如:Student st = new Student();

步骤2 正式引用
格式:方法名/对象名/new 类名(自定义对象名::成员方法);
列如:objLoad(st::nameToAgeOfString);

3.引用类的动态方法

格式:方法名/对象名/new 类名(已知类::其中的动态方法);
列如:classLoad(String::substring);

4.引用构造器(了解)


如(Stream流例子):team.map(Student::new).map(Student::toString).forEach(System.out::println);

public class StreamStudent {public static void main(String[] args) {// 队伍1ArrayList<String> team1 = new ArrayList<>();team1.add("陈玄风");team1.add("梅超风");team1.add("风清扬");team1.add("解风");team1.add("风波恶");team1.add("陆乘风");team1.add("曲灵风");team1.add("武眠风");team1.add("冯默风");team1.add("陆小风");// 队伍2ArrayList<String> team2 = new ArrayList<>();team2.add("宋远桥");team2.add("俞莲舟");team2.add("俞岱岩");team2.add("张松溪");team2.add("张翠山");team2.add("殷梨亭");team2.add("莫声谷");// 1、从第一个队伍中筛选出名字为3个字并且以“风”字结尾的人(Lambda表达式:返回名字长度为3,且后缀为风的字符串),筛选之后,只保留前6个。// 2、从第二个队伍中筛选出姓张的人员,筛选之后,不要第一个。 3、将两个筛选结果合并为一个队伍。//  4、将结果队伍中的字符串姓名作为Student对象的属性,创建Student对象,将集合中的元素都更改为Student类型。//   5、打印结果队伍的Student对象信息Stream<String> teamStreamOne = team1.stream().filter(s -> s.length() == 3 && s.endsWith("风")).limit(6);Stream<String> teamStreamTwo = team2.stream().filter(s -> s.startsWith("张")).skip(1);Stream<String> team = Stream.concat(teamStreamOne, teamStreamTwo);team.map(Student::new).map(Student::toString).forEach(System.out::println);}
}

Java总结13 Lambda表达式 和 方法引用 的概念与应用相关推荐

  1. 如何在Java 8中将Lambda表达式转换为方法引用?

    如果您使用Java 8进行编码,那么您会知道使用方法引用代替lambda表达式会使您的代码更具可读性,因此建议尽可能使用方法引用替换lambda表达式,但是,最大的问题是,您如何查找是否可以用方法引用 ...

  2. JAVA学习笔记 15 - 函数式接口、Lambda表达式和方法引用

    本文是Java基础课程的第十五课.主要介绍在JDK8中,Java引入的部分新特性,包括函数式接口.Lambda表达式和方法引用.这些新特性使得Java能够在按照面向对象思想进行开发的基础上,融合函数式 ...

  3. 【Java从入门到头秃专栏 7】语法篇(六) :Lambda表达式(->) 方法引用(::) stream流

    目录 1 Lambda表达式( -> ) ​ 2 方法引用( :: ) 3 Stream流 接下来介绍的三种语法叫:Lambda表达式 方法引用 stream流,这三种语法的使用要有特定条件,在 ...

  4. Java8 之 lambda 表达式、方法引用、函数式接口、默认方式、静态方法

    今天我来聊聊 Java8 的一些新的特性,确实 Java8 的新特性的出现,给开发者带来了非常大的便利,可能刚刚开始的时候会有点不习惯的这种写法,但是,当你真正的熟悉了之后,你一定会爱上这些新的特性的 ...

  5. lambda表达式与方法引用

    lambda 表达式 λ 属于匿名函数代码,使用箭头操作符 -> 左边是参数列表,右边是方法体 (参数类型 参数,···) -> {代码块}即使没有参数,也要提供空括号,就像是无参方法一样 ...

  6. jdk8新特性-Lambda表达式,方法引用

    Lambda方法引用的概念 1).什么是"方法引用":当我们使用Lambda实现一些功能时,发现已有的类库中已经有方法实现了这样的功能,这时,我们就可以引用已实现的方法来代替Lam ...

  7. lambda表达式和方法引用

    参考: 1 2 什么是lambda表达式 lambda意为λ,表示是一个函数,而一个函数只有唯一的输入输出映射,因此引出lambda表达式的定义 Lambda是一个唯一匿名方法 一个接口,如果只有一个 ...

  8. java写方法用来调用_Java从入门到入土(79)lambda表达式和方法引用

    lambda表达式是Java8引入的新功能.lambda表达式以字面量的形式把少量代码直接写在程序中,从而让 Java 编程更符合函数式风格(Java 实质上是面向对象语言.不过,引入lambda 表 ...

  9. 【Java 进阶】匿名类(代码传递、回调、过滤器)、Lambda表达式(方法引用)、函数式接口(Supplier、Consumer、Predicate、Function)

    匿名类 匿名类(Anonymous Class) 匿名类的使用注意 匿名类 - 代码传递 - 测试代码运行时间的工具类 匿名类 - 回调 - 简易网络请求 匿名类 - 过滤器 - 获取目录下的所有文件 ...

最新文章

  1. 使用IDEA创建Maven项目和Maven使用入门(配图详解)
  2. leetcode212. 单词搜索 II
  3. 安卓牛客专项练习2020.12.31
  4. 中芯国际:与阿斯麦集团签订购买单 总价12亿美元
  5. 四万个与RIG漏洞利用套件相关的子域名遭到关闭
  6. 华为HCNA之配置OSPF认证实验
  7. 使用redis做缓存处理时出现的问题
  8. 安装oracle数据库过程中系统表空间,Oracle数据库安装及配置
  9. 苹果App Store审核指南中文翻译
  10. Pr零基础入门指南笔记一——项目、序列、预设
  11. 小白尝试——去除apk流氓权限
  12. Word中录制宏,学会后成大神
  13. ncbi blast MATLAB,NCBI在线BLAST使用方法与结果详解
  14. 真Unity3d_人物摇杆操作(2022年重写)
  15. 全球疫情引起 P 站访问量激增
  16. SAP HR schema 详细解
  17. JAVA RedisTemplate实现(加锁/解锁) 解决高并发问题
  18. 软铁氧体磁芯的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. 视频压缩软件有哪些?这几种压缩工具了解一下
  20. 计算机的过程作文450,电脑课的那些事

热门文章

  1. ios开源框架——UITableView+FDTemplateLayoutCell优化UITableViewCell高度计算
  2. 计算机配件名称++太平洋,笔记本电脑配件大全
  3. 详解C语言最快关键字——register
  4. lo4net的简单运用
  5. dell服务器装独立显卡无显示输出,dell服务器设置独立显卡(dell服务器加显卡)...
  6. 数据库、MySQL基本知识
  7. 计算机术语中cae,厉害了 揭秘汽车设计中CAE仿真技术
  8. 来瞧一瞧unshift和push的用法及“性能“对比
  9. 数据结构-头插法和尾插法
  10. 东网科技、Rancher Labs联合发布“容器+虚拟化”双引擎超融合平台HOR