JDK1.8新特性学习之Lambda表达式(一)

一,Lambda表达式基础语法

    JAVA8中引入了一个新的操作符"->",该操作符称为箭头操作符或Lambda操作符.箭头操作符将Lambda表达式拆分成两部分.

    左侧:Lambda表达式的参数列表

    右侧:Lambda表达式中所需执行的功能,即Lambda体    

    语法格式一:无参数,无返回值

        

() -> System.out.println("Hello,Lambda!")

    语法格式二:有一个参数,无返回值

(x) -> System.out.println(x+"Lambda!")

    语法格式三:若只有一个参数,小括号可以省略不写

x -> System.out.println(x+"Lambda!")

    语法格式四:有两个参数,并且有返回值

(x,y) -> {
System.out.println("Hello,Lambda!");
return Integer.compare(x, y);
}

    语法格式五:有多个参数,return和大括号都可以省略

(x,y) -> Integer.compare(x, y)

    语法格式六:Lambda表达式的参数列表的数据类型可以省略不写,因为JVM编译器能通过上下文推断出数据类型,即"类型推断"

(x,y) -> Integer.compare(x, y)

(Integer x,Integer y) -> Integer.compare(x, y)

    左右遇一括号省,左侧推断类型省.能省则

二,"函数式接口"的支持

    函数式接口:接口中只有一个抽象方法的接口,称为函数式接口.可以使用注解@FunctionalInterface修饰.Lambda需要函数式接口的支持.

    

@FunctionalInterface
public interface MyInterface<T> {
public void test(T t);
}

    JAVA8内置的四大核心函数式接

    

函数式接口 参数类型 返回类型 用途
Consumer<T>
消费型接口
T void 对类型为T的对象应用操作,包含方法:
void accept(T t)
Supplier<T>
供给型接口
T 返回类型为T的对象,包含方法: T get();
Function<T, R>
函数型接口
T R 对类型为T的对象应用操作,并返回结果。结果是R类型的对象。包含方法: R apply(T t);
Predicate<T>
断言型接口
T boolean 确定类型为T的对象是否满足某约束,并返回
boolean 值。包含方法
boolean test(T t);

    其他接口

函数式接口 参数类型 返回类型 用途
BiFunction<T, U, R> T, U R 对类型为 T, U 参数应用
操作, 返回 R 类型的结
果。 包含方法为
R apply(T t, U u);
UnaryOperator<T>
(Function子接口)
T T 对类型为T的对象进行一
元运算, 并返回T类型的
结果。 包含方法为
T apply(T t);
BinaryOperator<T>
(BiFunction 子接口)
T, T T 对类型为T的对象进行二
元运算, 并返回T类型的
结果。 包含方法为
T apply(T t1, T t2);
BiConsumer<T, U> T, U void 对类型为T, U 参数应用
操作。 包含方法为
void accept(T t, U u)
ToIntFunction<T>
ToLongFunction<T>
ToDoubleFunction<T>
T int
long
double
分 别 计 算 int 、 long 、
double、 值的函数
IntFunction<R>
LongFunction<R>
DoubleFunction<R>
int
long
double
R 参数分别为int、 long、
double 类型的函数

三,方法引用和构造器引

    1.方法引用:若Lambda体中的内容有方法已经实现了,我们可以使用"方法引用".(可以理解为方法引用是Lambda表达式的另外一种实现方式)

    三种语法格式:

    对象::实例方法名

    类::静态方法名

    类::实例方法名

    PS:1).需要保证函数式接口中的方法参数及返回值与Lambda体中使用方法引用的方法的参数及返回值保持一致

    
Supplier<String> su1=emp::getName;
Supplier<String> su2=() -> emp.getName();
    2).若Lambda参数列表中的第一参数是实例方法的调用者,而第二个参数是实例方法的参数时,可以使用ClassName::method(类::实例方法)
BiPredicate<String, String> biP=String::equals;
    2.构造器引用

    格式: ClassName::new

    与函数式接口相结合,自动与函数式接口中方法兼容,可以把构造器引用赋值给定义的方法,构造器参数列表要与接口中抽象方法的参数列表保持一致

Employee::new

    3. 数组引用

    格式:Type::new

String[]::new

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值