集合 Lambda表达式 详解

#  集合  Lambda表达式

语言:

适合做服务器开发:JAVA .net pht c++  c# asp golang python…

前端:ios android H5 jsp…

数据库:mysql oracle BD2 Hbase MonggoDB redis ,sql sever…

大数据:hadoop flume spark hive yarn zonokeeprer  kafka sqoop,HDFS mr,scala…

Lambda表达式:

只有一个抽象方法的接口,java8的新特性,java可以函数式编程,在并发性能上迈出了实质性的一步。

比较Lambda和匿名内部类(lambda是简单的匿名内部类)

1. 匿名内部类可以为任意接口创建实例,不管接口包含多少个抽象方法,只要匿名内部类实现所有的抽象方法即可; 但Lambda表达式只能为函数式接口创建实例(即只能有一个抽象方法)

2. 匿名内部类可以为抽象类甚至是普通类创建实例;但Lambda表达式只能为函数式接口创建实例

3. 匿名内部类实现的抽象方法的方法体允许调用接口中定义的默认(default)方法;但Lambda表达式的代码块不允许调用接口中的默认(default)方法

基本语法

1.构成:(参数)->表达式  or  (参数)->{方法体;}

2.形参列表:形参列表允许省略形参类型,若形参列表中只有一个参数,形参列表的圆括号也可以省略代码

3.箭头(->):必须通过英文的划线号和大于符号组成

4.代码块:如果代码块只包含一条语句,lambda表达式允许省略代码块的花括号,那么这条语句就不要用花括号表示语句结束

5.返回值:lambda代码块只有一条return语句,甚至可以省略return关键字。(lambda表达式需要返回值,而它的代码块中仅有一条省略了return的语句,lambda表达式会自动返回这条语句的结果)

6.lambda表达式可以直接作为函数的参数,当要实现只有一个接口的抽象函数时,使用lambda表达式能够更灵活。

7.lambda表达式类型:它的定义是:一个接口,如果只有一个显式声明的抽象方法,那么它就是一个函数接口。一般用@FunctionalInterface标注出来 (也可以不标记),函数式接口可以

包含多个default或static方法,但是只能声明一个抽象方法。(注解)@FuctionalInterface主要作用就是检查当前接口是不是函数接口。

8.如果是全局的变量直接用.如果是局部变量会被默认在前面添加final(被作为常量,类似于局部变量在局部内部类中使用的情况)

方法引用与构造器引用

1.引用类方法


//* 1.引用类方法

interface Converter{

    //将字符串转换成整数

    Integer convert(String value);

}

class Test1{

    public static void fun1() {

        //原来的方法

        Converter converter = value->Integer.valueOf(value);

        Integer v1 = converter.convert("222");

        System.out.println(v1);

        

        //简化

        //引用类方法

        //通过::实现,这里会自动将lambda表达式方法的参数全部传递给当前的方法

        Converter converter2 = Integer::valueOf;

        Integer v2 = converter2.convert("333");

        System.out.println(v2);

    }

}

2.引用特定对象的实例方法


//* 2.引用特定对象的实例方法

interface IA{

    public void show(String message);

}

class A{

    public void play(String i) {

        System.out.println("这里是A的方法play"+"  i:"+i);

    }

}

class Test2{

    public static void fun2() {

        //原来

        IA ia = message->new A().play(message);

        ia.show("hello");

        //简化

        IA ia2 = new A()::play;

        ia2.show("world");

    }

}

3.引用某类对象的实例方法


//* 3.引用某类对象的实例方法

interface IB{

    String subString(String string,int stat,int end);

}

class Test3{

    public static void fun3() {

        //原来

        IB ib = (string,stat,end)->string.substring(stat, end);

        String sub1 = ib.subString("hello world", 2, 4);

        System.out.println(sub1);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值