博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lambdas
阅读量:7219 次
发布时间:2019-06-29

本文共 1161 字,大约阅读时间需要 3 分钟。

hot3.png

一个函数式接口非常有价值的属性就是他们能够用lambdas来实例化。这里有一些lambdas的例子:

左边是指定类型的逗号分割的输入列表,右边是带有return的代码块:

1 (int x, int y) -> { return x + y; }

左边是推导类型的逗号分割的输入列表,右边是返回值:

1 (x, y) -> x + y

左边是推导类型的单一参数,右边是一个返回值:

1 x -> x * x

左边没有输入 (官方名称: ),在右边返回一个值:

1 () -> x

左边是推导类型的单一参数,右边是没返回值的代码块(返回void):

1 x -> { System.out.println(x); }

静态方法引用:

1 String::valueOf

非静态方法引用:

1 Object::toString

继承的函数引用:

1 x::toString

构造函数引用:

1 ArrayList::new

你可以想出一些函数引用格式作为其他lambda格式的简写。

           
翻译于 1年前

2人顶

顶 翻译的不错哦!            

       

方法引用  等价的lambda表达式
String::valueOf
x -> String.valueOf(x)
Object::toString
x -> x.toString()
x::toString
() -> x.toString()
ArrayList::new
() -> new ArrayList<>()

当然,在Java里方法能被重载。类可以有多个同名但不同参数的方法。这同样对构造方法有效。ArrayList::new能够指向它的3个构造方法中任何一个。决定使用哪个方法是根据在使用的函数式接口。

一个lambda和给定的函数式接口在“外型”匹配的时候兼容。通过“外型”,我指向输入、输出的类型和声明检查异常。

给出两个具体有效的例子:

1 Comparator<String> c = (a, b) -> Integer.compare(a.length(),
2                                                  b.length());

一个Comparator<String>的compare方法需要输入两个阐述,然后返回一个int。这和lambda右侧的一致,因此这个任务是有效的。

1 Runnable r = () -> { System.out.println("Running!"); }

一个Runnable的run方法不需要参数也不会返回值。这和lambda右侧一致,所以任务有效。

在抽象方法的签名里的受检查异常(如果存在)也很重要。如果函数式接口在它的签名里声明了异常,lambda只能抛出受检查异常。

转载于:https://my.oschina.net/u/1412027/blog/223105

你可能感兴趣的文章
遗传算法
查看>>
将web网站移动化
查看>>
Application-Session-Cookie
查看>>
Perl的多进程框架(watcher-worker)
查看>>
phpMyAdmin 后台拿webshell
查看>>
Linux 关机 休眠, 关闭移动设备自动挂载 命令
查看>>
Html唤起手机APP,如果有就唤起,如果没有就跳到下载页。
查看>>
Java中File类如何扫描磁盘所有文件包括子目录及子目录文件
查看>>
VC++ 限制窗口的大小范围的方法
查看>>
结对开发-返回一个整数数组中最大子数组的和(首尾相接版)
查看>>
meanshift-聚类
查看>>
不要if else的编程
查看>>
rn.ShowDialog() == DialogResult.OK
查看>>
20160519
查看>>
SCU 3132(博弈)
查看>>
正则表达式
查看>>
delete archivelog all 无法彻底删除归档日志?
查看>>
Redis五大数据类型
查看>>
大型分布式网站架构技术总结
查看>>
矩阵求导与投影梯度相关问题
查看>>