Java 8 Lambda

一、基本语法

 

    1.  (parameters) -> expression    参数+表达式

  此语法下表达式将执行并返回结果

 

    2.(parameters) ->{ statements; }  参数+语句块

  ①return语句会吧控制权交给匿名方法的调用者

  ②break和continue只能在循环中使用

 

    表达式实例:

(int x, int y) -> x + y ;

() -> 42 ;

(String s) -> { System.out.println(s); }

注意:Lambda表达式只能创建接口interface对象

Comparator<String> c = (String s1, String s2) -> s1.compareToIgnoreCase(s2);




String[] atp = {"Rafael Nadal", "Novak Djokovic",
                "Stanislas Wawrinka",
                "David Ferrer","Roger Federer",
                "Andy Murray","Tomas Berdych",
                "Juan Martin Del Potro"};
    //将数组转为list再使用lambda
        List<String> players =  Arrays.asList(atp);

        players.forEach((player) ->{
            System.out.println(player + "; ");
        });

 

二、目标类型

需要注意的是,函数式接口的名称并不是lambda表达式的一部分。那么问题来了,对于给定的lambda表达式,它的类型是什么?答案是:它的类型是由其上下文推导而来。

下面给出了这些带有目标类型的上下文:

①变量声明

②赋值

③返回语句

④数组初始化器

⑥方法和构造方法的参数

⑦lambda表达式函数体

⑧条件表达式(? :

⑨转型(Cast)表达式

 

三、方法引用(Method references)

Consumer<Integer> b1 = System::exit;    // void exit(int status)
Consumer<String[]> b2 = Arrays:sort;    // void sort(Object[] a)
Consumer<String> b3 = MyProgram::main;  // void main(String... args)
Runnable r = Myprogram::mapToInt        // void main(String... args)

方法引用的种类

  • 静态方法引用:ClassName::methodName
  • 实例上的实例方法引用:instanceReference::methodName
  • 超类上的实例方法引用:super::methodName
  • 类型上的实例方法引用:ClassName::methodName
  • 构造方法引用:Class::new
  • 数组构造方法引用:TypeName[]::new

 

 

持续更新。。。。。。。。。。。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值