咨询热线:15527815479 联系人:潘总 地址:江苏省南京市白下区168号
(三)lamda
来源:乐众集团官方线路 发布时间:2019-10-30 点击量:111
lambda
lambda可以理解为匿名函数,由参数列表 箭头 函数主体组成语法
(parameters)->expression 或 (parameters)->{statements;}
第一种只有一句表达式,会默认返回表达式的值,所以隐藏了return。例如
(Integer x)-> x+x
第二种用于有多个表达式逻辑的代码块,必须使用return明确返回值。
(Integer x)-> { System.out.println("start ++x"); ++x; return x; };
函数接口
函数接口是仅有一个抽象方法的接口,例如Function接口
@FunctionalInterfacepublic interface Function<T, R> { R apply(T t);}
函数接口的作用是可以让lambda表达式为函数式接口的抽象方法提供实现,用lambda直接取代内部类比如runnable内部类接口
Runnable r2 = new Runnable(){ public void run(){ System.out.println("Hello World 1"); }};
Runnable 的lambda方式
Runnable r1 = () -> System.out.println("Hello World 1");
这两种方式完全等价,可以说离开函数接口,lambda表达式没有任何作用,一个lambda函数始终是函数接口的实现。
类型推断
lambda表达式可以在编辑期间自动推断参数类型例如
Function<Integer,Integer> fs = (x)-> x+x;
该例子可以通过Function接口的泛型化参数推断出x是Integer类型的参数。
初学者如何写好lambda表达式
熟悉相关函数接口,明确函数接口抽象方法的结构(参数列表和返回值类型)例如Function接口
@FunctionalInterfacepublic interface Function<T, R> { R apply(T t);}
观察抽象方法 R apply(T t);可见该抽象方法定义为由一个T类型的值返回一个R类型的返回值例如
Function<Integer,String> fs = (x)-> { String helloString = "hello" + x.intValue(); return helloString; };
声明为输入参数T为Integer类型,返回值R为String类型,所以lambda的参数列表数目(lambda参数可以自动推断)和函数接口抽象方法数目一致,lambda方法体返回结果类型和函数接口返回值类型一致即可。
方法引用
ClassName::staticMethod或者ClassName::instanceMethod静态方法的引用
public class Main { public static void main(String[] args) { List<String> strings = new ArrayList<>(); strings.forEach(Main::print); } public static void print(String abc){ System.out.println(abc); }}
需要注意的是所引用的方法需要和相关的函数接口匹配(和函数接口的参数类型和返回值一致),比如这个例子的forEach方法接受的函数接口是Consumer
default void forEach(Consumer<? super T> action) { Objects.requireNonNull(action); for (T t : this) { action.accept(t); } }
Consumer是一个消费型的函数接口,接受一个T类型,无返回值
@FunctionalInterfacepublic interface Consumer<T> { void accept(T t);}
而我们的print方法接受一个String类型的参数,无返回值,且strings被限定为String类型,所以Consumer的T类型是String类型,因此print方法能和Consumer函数接口匹配。实例方法引用
List<String> list = new ArrayList<>(); list.stream().sorted(String::compareTo);
静态方法引用与实例方法引用的区别
静态方法ClassName::staticMethod ==== (x)->{statements}实例方法引用ClassName::staticMethod ==== (x,y)->{statements}instanceObject::instanceMethod ===== (x)->{statements}关注公众号,一起阅读IT经典书籍
相关产品
-
然而,一眨眼的功夫,熊熊大火便顺势蹿上三楼。就在几分钟的时间里,街区居民都被消防队的鸣笛声唤醒,救护车也赶到了现场。
-
欧洲多山,公路多修得弯弯曲曲,每隔一段距离,都会设有一临时停车区,不大,只有三四个车位长度。这不是用来休息,是让慢车临时停靠,以便让后面的快车先行超越。不要以为这没用处,尤其是大巴,每开一段路,便会停一下,以便让后面的车辆超越。
-
不过也有网友对两人的闪婚和闪离提出质疑。微博网友@Maryjane-Men喵喵:离个婚还写这么唯美,真心唯美为何要离。今年结婚明年就离,这个是草率自己还是轻视爱情?微博网友@谢谢杰则认为:“说得这么好,那为啥离婚,离婚还炒作一把。”
-
中国队总教练刘国梁认为,跨国配对让中国的垄断优势不存在了,和其他选手之间的水平更接近。其他选手会努力增强实力,比赛有了更多可能。
-
记者获悉,为了掩饰不法行为,浴场用字母A-H表示卖淫的八种价格。警方经对查获的记录本、单据等进行统计,水之韵沐浴中心经营期间每天都有卖淫活动,卖淫女卖淫至少260余人次,得赃款约12万元。
-
2.0时代则以当前的OPPO和vivo为代表,线下渠道在互联网流量增长告竭后实现了反攻,最显著的标志来自两方面,一是华为击败了小米成为市场第一,其次则是OPPO和vivo在2016年以来“忽如一夜春风来”的进击态势,特别是OPPO和vivo的成功,让“专治不服”的互联网厂商也开始学着铺线下渠道,比如此前格外强调“互联网思维”的小米,声称要在5年内打造1000家线下店。
-
中国台湾网11月7日讯 中国国民党和台当局“不当党产处理委员会”因党产问题已经开战。“党产会”7日正式做出第二号和第三号行政处分,要求永丰银和台银将国民党账户余额提存法院。据台湾《联合报》报道,国民党在永丰银和台银的存款近9亿元(新台币,下同),双方将展开第二波的司法和政治攻防战。
-
编辑点评:可以说,新一代马自达2目前来看最大的亮点莫过于这套插电混动系统,尤其是马自达经典的转子发动机的搭载,相信会勾起许多消费者购买的欲望。让我们一起期待这款车型的上市吧!(许振宇)
热点资讯
- Scala的文件读写操作与正则表达式2019-10-30
- 前澳大利亚国防军指挥官提名总督代表英格兰女王|总督|海利|国防军行事2019-06-26
- 7月19日发布!小米Max3提前上架京东2019-06-26
- 三星Note9丁香紫高清渲染图曝光:漂亮2019-06-26
- 苹果iPhoneX遗落出租车,司机唤出“帮忙代捡”神操作?2019-06-26
- 小偷“钟情”小米商品:小米水壶、充电宝、VR一体机全不放过2019-10-29
- 全国首次专业学位水平评估结果之教育2019-10-30
- 好了伤疤忘了疼?《实况足球2019》公开嘲讽《FIFA19》2019-06-26