Java lambda表达式

Lambda表达式的介绍

        Lambda表达式是 JDK8最重要的新功能之一。使用 Lambda 表达式可以替代只有一个抽象函数的接口实现,告别匿名内部类,代码看起来更简洁易懂。Lambda表达式同时还提升了对集合、框架的迭代、 遍历、过滤数据的操作。Lambda表达式使用函数式编程,参数类型自动推断,代码量少,lambda表达式可以用于任何有函数式接口的地方。

使用案例:

public class Test {
    public static void main(String[] args) {
        //匿名内部类方式
        new Thread(new Runnable() {
            @override
            public void run() {
                System.out.println("run.. ........" );
            }
        }).start();
        //Lambda表达式方式
        new Thread(()->{System.out.println("run........"); }).start();
    }
}

函数式接口

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。函数式接口可以被隐式转换为 lambda 表达式。一些自带的函数式接口如下。

Supplier 代表一个输出 
Consumer 代表一个输入 
BiConsumer 代表两个输入 
Function 代表一个输入,一个输出(一般输入和输出是不同类型的) 
UnaryOperator 代表一个输入,一个输出(输入和输出是相同类型的) 
BiFunction 代表两个输入,一个输出(一般输入和输出是不同类型的) 
BinaryOperator 代表两个输入,一个输出(输入和输出是相同类型的)

lambda表达式会自动推断类型,如果要自定义函数式接口,需要在接口中添加@FunctionalInterface注解

方法的引用

        方法引用是用来直接访问类或者实例的已经存在的方法或者构造 方法,方法引用提供了一种引用而不执行方法的方式,如果抽象 方法的实现恰好可以使用调用另外一个方法来实现,就有可能可 以使用方法引用。

        方法引用分为静态方法引用、实例方法引用、对象方法引用、构造方法引用。如果函数式接口的实现恰好可以通过调用一个静态方法来实现,那么就可以使用静态方法引用,通过调用一个实 例的实例方法来实现,那么就可以使用实例方法引用,可以通过调用一个类 的构造方法来实现,那么就可以使用构造方法引用。抽象方法的第一个参数类型刚好是实例方法的类 型,抽象方法剩余的参数恰好可以当做实例方法的参数。如果函 数式接口的实现能由上面说的实例方法调用来实现的话,那么就 可以使用对象方法引用。

Function<String,String >f1=(str)->str.toUpperCase();
Function<String ,String >f2=(str)-> Test2.toUpperCase(str);
//静态方法引用
Function<String ,String >f3=Test2::toUpperCase;
Function<String ,String >f4=Fun::toUpperCase;
System.out.println(f1.apply("abc"));
System.out.println(f2.apply("abc"));
System.out.println(f3.apply("abc"));
System.out.println(f4.apply("abc"));
//实例方法引用
Supplier<String> s1 = ()->new Test3().put();
Supplier<String> s2 = ()->{return new Test3().put();};
Supplier<String> s3 = new Test3()::put;
//对象方法引用
Consumer<Too>c1=(too)->new Too().foo();
c1.accept(new Too());
Consumer<Too>c2=(Too too)->new Too2().foo();
c2.accept(new Too());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值