展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

jdk8新特性

Lambda表达式

  • Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)
  • 箭头函数
1.Java中的箭头函数只是用与接口中有且只有一个抽象方法的
2.箭头函数的参数就是当前接口中定义的抽象方法参数
3.箭头函数的方法体就是需要重写的当前接口中的抽象方法
4.箭头函数的返回值就是当前接口中的抽象方法的返回值
  • 模版
(parameters) ->{ statements; } //(参数) ->{方法体}
1.可选类型声明:不需要声明参数类型,编译器可以统一识别参数值
2.可选的参数圆括号:只有一个参数无需定义圆括号,但多个参数需要定义圆括号

3.可选的大括号:如果主体只包含了一个语句,可省略大括号
4.可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,主体部分有大括号则需使用return关键字

//例子
// 1. 不需要参数,返回值为 5
() -> 5
// 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x
// 3. 接受2个参数(数字),并返回他们的差值
(x, y) -> x – y
// 4. 接收2个int型整数,返回他们的和
(int x, int y) -> x + y
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)
  • 通常使用lambda表达式来创建匿名方法

方法引用

  • 定义:方法引用通过方法的名字来指向一个方法,标准形式是 类名::方法名
1. 构造器引用:
a.构造方法引用(也称作构造器引用):语法一 Class::new 语法二 Class<T>::new //类名称(该类有构造器)::new
b.数组构造方法引用:语法:TypeName[]::new
//例子
int[]::new //是一个含有一个参数的构造器引用,这个参数就是数组的长度;等价于lambda表达式 x -> new int[x] new一个指定长度的数组
2. 静态方法引用:语法是Class::static_method //类名称::静态方法
3. 引用某个对象的实例方法 containingObject::instanceMethodName
//例如String::compareToIgnoreCase
String类的compareToIgnoreCase方法,该方法比较两个String字符串;这里是String类型对象的compareToIgnoreCase方法的引用
4. 引用某个类型的(任意)对象的实例方法 ContainingType::methodName
a.实例上的实例方法引用:
组成语法格式:instanceReference::methodName
//实例对象::方法 实例化一个对象,并引用该对象的方法
b.超类上的实例方法引用:
组成语法格式:super::methodName
//super::超类中方法
c.类型上的实例方法引用:
组成语法格式:ClassName::
methodName //类名称::<泛型类型>泛型方法 若类类的实例方法是泛型<T>,就需要在::分隔符前提供类型参数 对于指定泛型类的情况<String>,类型参数位于类名的后面::的前面
  • 案例
// 方法引用调用者与方法之间使用::进行分隔
System.out::println 等同于 s -> System.out.println(s);
Math::max 等同于 (int x, int y) -> Math.max(x,y);
Object::equals 等同于 (o1,o2) -> o1.equals(o2)
  • 方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法;方法引用提供了一种引用而不执行方法的方式
  • 方法引用是一个Lambda表达式

内置函数接口

1.Function<T, R>:函数型接口,接收类型为T的参数,并对其操作,然后返回类型为R的结果。其中包含有apply(T t)方法
2.Consumer<T>:消费型接口,接收类型为T的参数,对其进行操作。无返回值。其中包含有accept(T t)方法
3.Supplier<T>:供应型接口,返回类型为T的结果。其中包含有T get()的方法
4.Predicate<T>:断言型函数,接收类型为T的参数,对其进行断言,返回类型为boolean的结果。其中包含有boolean test(T t)的方法

行为参数化

1.定义:通过API来传递代码的能力;也就是说当我们要写两个方法,两个方法中只有几行代码不同,可将不同的部分提取出来,作为参数传递进去
2.让方法接受多种行为(或战略)作为参数,并在内部使用,完成不同的行为
posted @   DogLeftover  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
历史上的今天:
2021-07-22 ubuntu入门
点击右上角即可分享
微信分享提示