名字
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)表达式
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
持续更新。。。。。。。。。。。。。
最新评论 我的评论
t-io为本站提供HTTP、WebSocket、Socket、页面渲染与压缩等服务,nginx为本站提供反向代理服务
© 2017-2021 钛特云 版权所有 | 浙ICP备17032976号 | 浙公网安备 33011802002129号