发表于:2019-4-3 18:06:08 点击量:0 赞:未知

一、基本语法

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

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

TCP连接数:, IP数:
    发 送