Effective Java~44. 坚持使用标准的函数接口

在 java.util.Function 中有 43 个接口。不能指望全部记住它们,但是如果记住了六个基本接口,就可以在需要它们时派生出其余的接口。基本接口操作于对象引用类型。

Operator 接口表示方法的结果和参数类型相同。

Predicate 接口表示其方法接受一个参数并返回一个布尔值。

Function 接口表示方法其参数和返回类型不同。

Supplier 接口表示一个不接受参数和返回值 (或“供应”) 的方法。

Consumer 表示该方法接受一个参数而不返回任何东西,本质上就是使用它的参数。

六种基本函数式接口概述如下:

接口方法示例
UnaryOperator<T>T apply(T t)String::toLowerCase
BinaryOperator<T>T apply(T t1, T t2)BigInteger::add
Predicate<T>boolean test(T t)Collection::isEmpty
Function<T,R>R apply(T t)Arrays::asList
Supplier<T>T get()Instant::now
Consumer<T>void accept(T t)System.out::println


        在处理基本类型 int,long 和 double 的操作上,六个基本接口中还有三个变体。 它们的名字是通过在基本接口前加一个基本类型而得到的。 因此,例如,一个接受 int 的 Predicate 是一个 IntPredicate ,而一个接受两个long 值并返回一个 long 的二元运算符是一个 LongBinaryOperator 。 除 Function 接口变体通过返回类型进行了参数化,其他变体类型都没有参数化。 例如, LongFunction<int[]> 使用 long 类型作为参数并返回了 int [] 类型。

        Function 接口还有九个额外的变体,当结果类型为基本类型时使用。 源和结果类型总是不同,因为从类型到它自身的函数是 UnaryOperator 。 如果源类型和结果类型都是基本类型,则使用带有 SrcToResult 的前缀Function ,例如 LongToIntFunction (六个变体)。如果源是一个基本类型,返回结果是一个对象引用,那么带有 ToObj 的前缀 Function ,例如 DoubleToObjFunction (三种变体)。

        有三个包含两个参数版本的基本功能接口,使它们有意义: BiPredicate <T,U> , BiFunction <T,U,R> 和 BiConsumer <T,U> 。 也有返回三种相关基本类型的 BiFunction 变体: ToIntBiFunction <T,U> , ToLongBiFunction<T,U> 和 ToDoubleBiFunction <T,U> 。Consumer 有两个变量,它们带有一个对象引用和一个基本类型: ObjDoubleConsumer <T> , ObjIntConsumer <T> 和 ObjLongConsumer <T> 。 总共有九个两个参数版本的基本接口。

        最后,还有一个 BooleanSupplier 接口,它是 Supplier 的一个变体,它返回布尔值。 这是任何标准函数式接口名称中唯一明确提及的布尔类型,但布尔返回值通过 Predicate 及其四种变体形式支持。 前面段落中介绍的 BooleanSupplier 接口和 42 个接口占所有四十三个标准功能接口。 无可否认,这是非常难以接受的,并且不是非常正交的。 另一方面,你所需要的大部分功能接口都是为你写的,而且它们的名字是经常性的,所以在你需要的时候不应该有太多的麻烦。

        大多数标准函数式接口仅用于提供对基本类型的支持。 不要试图使用基本的函数式接口来装箱基本类型的包装类而不是基本类型的函数式接口。 虽然它起作用,但它违反了第 61 条中的建议:“优先使用基本类型而不是基本类型的包装类”。使用装箱基本类型的包装类进行批量操作的性能后果可能是致命的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL Server 执行 字符串

EXEC (字符串或变量) 例&#xff1a; EXEC (SELECT * FROM Orders) 或 DECLARE sql nvarchar(50)SET sqlSELECT * FROM OrdersEXEC (sql)转载于:https://www.cnblogs.com/duwx/archive/2009/11/19/1606152.html

Python爬取大量数据时防止被封IP

From&#xff1a;http://blog.51cto.com/7200087/2070320 基于scrapy框架的爬虫代理IP设置&#xff1a;https://www.jianshu.com/p/074c36a7948c Scrapy: 针对特定响应状态码&#xff0c;使用代理重新请求&#xff1a;http://www.cnblogs.com/my8100/p/scrapy_middleware_aut…

c语言错误c4430,声明*C某类::Getdocument();(已声明,不兼容)

创建了一个CRightWindow类&#xff0c;基类为CScrollView&#xff0c;在.h文件中如下&#xff1a;public:CMy2015Doc* GetDocument(); // error C2143: 语法错误 : 缺少“;”(在“*”的前面)// error C4430: 缺少类型说明符 – 假定为 int。注意: C 不支持默认 int在…

CollapsiblePanel控件

CollapsiblePanel 控件属性将被初始化如下面的示例代码所示&#xff0c;斜体属性为可选属性。 <ajaxToolkit:CollapsiblePanelExtender ID"cpe" runat"Server"TargetControlID"Panel1"CollapsedSize"0"ExpandedSize"300"…

Effective Java~45. 谨慎使用Stream

在 Java 8 中添加了 Stream API&#xff0c;以简化顺序或并行执行批量操作的任务。 该 API 提供了两个关键的抽象&#xff1a;流(Stream)&#xff0c;表示有限或无限的数据元素序列&#xff0c;以及流管道 (stream pipeline)&#xff0c;表示对这些元素的多级计算。 Stream 中的…

shell 中 $(( )) 与 $( ) 还有 ${ } 的区别

From&#xff1a;http://blog.chinaunix.net/uid-14351756-id-2820651.html $( ) 与 (反引号) 在 bash shell 中&#xff0c;$( ) 与 (反引号) 都是用来做命令替换用(command substitution)的。 所谓的命令替换与我们第五章学过的变量替换差不多&#xff0c;都是用来重组命…

最近发包给朋友,搞定软件小活儿、解决小功能模块的感受

有时候也想&#xff0c;所有的事情都靠自己解决&#xff0c;太辛苦了太累了&#xff0c;在不差钱的这个年代&#xff0c;有些能让别人做的事情&#xff0c;就让别人做吧&#xff0c;但是一直找不到合适的人&#xff0c;什么叫合适的人&#xff1f;我简单的说几下&#xff0c;不…

c语言数列偶数在奇数前面,奇数

奇偶校验2021-05-19 15:03:06奇偶校验(Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验&#xff0c;反之&#xff0c;称为偶校验。奇偶校验需要一位校验位&#xff0c;即使用串口通…

利用自定义web-font实现数据防采集

From&#xff1a;https://blog.csdn.net/fdipzone/article/details/68166388 完整源码&#xff1a;https://download.csdn.net/download/fdipzone/9798142 web-font介绍 web-font 是 CSS3 中的一种标记 font-face&#xff0c;在 font-face 声明里&#xff0c;你可以声明一种字…

数字证书~证书链

来源&#xff1a;客户端认证https服务端证书过程详解——证书链_huzhenv5的博客-CSDN博客_证书链认证过程 基本概念 证书 首先&#xff0c;我们看看在wikipedia上对证书的定义&#xff0c;In cryptography, a public key certificate (also known as a digital certificate o…

修改Netbeas的注释结构

Eclipse修改注释的方法&#xff1a;  窗口-》首选项-》java-》代码样式-》代码模板-》注释-》方法-》确定&#xff0c;下面就可以修改了  Netbeans修改注释的方法&#xff1a;  工具->模板 打开 看见那一排列表没有 展开Java 选择Java类 点击 在编辑器中打开 …

c语言assign用法,object-c语言的nonatomic,assign,copy,retain的区别

nonatomic&#xff1a;非原子性访问&#xff0c;不加同步&#xff0c;多线程并发访问会提高性能。如果不加此属性&#xff0c;则默认是两个访问方法都为原子型事务访问。(atomic是Objc使用的一种线程保护技术&#xff0c;基本上来讲&#xff0c;是防止在写未完成的时候被另外一…

反反爬技术,破解猫眼网加密数字

From&#xff1a;https://blog.csdn.net/qq_31032181/article/details/79153578 From&#xff1a;http://www.freebuf.com/news/140965.html 利用自定义web-font实现数据防采集&#xff1a;http://blog.csdn.net/fdipzone/article/details/68166388 利用前端字体文件(.ttf)混…

数字签名,数字证书,证书链原理

来源&#xff1a;数字签名&#xff0c;数字证书&#xff0c;证书链原理&#xff08;图文详解&#xff09;_Ruby丶彬的博客-CSDN博客_证书链验证原理 数字签名&#xff0c;数字证书&#xff0c;加密简述 数字签名&#xff1a;谈及数字签名&#xff0c;就如小时候老师叫把卷子或…

成都信息工程c语言题库,成都信息工程学院C语言考试题及答案

}in 0;while (sum < im) { }sum - in; in--;printf(\sum%d\\n\in , sum); return 0;in; sum in;编写一程序P215.C实现以下功能求S1/1&#xff01;1/2&#xff01;1/3&#xff01;…1/N&#xff01;并输出结果(显示时小数部分占16位&#xff0c;计算时要求从第1项开始往后累…

转--javascript 数组

较为上篇更为深刻 原文&#xff1a;http://blog.csdn.net/jaylongli/archive/2009/03/20/4007823.aspx 数组有四种定义的方式 使用构造函数&#xff1a; vara newArray(); varb newArray(8); varc newArray("first", "second", "third"); 或者数…

猫眼 — 破解数字反爬获取实时票房

From&#xff1a;https://zhuanlan.zhihu.com/p/33112359 js分析 猫_眼_电_影 字体文件 font-face&#xff1a;https://www.cnblogs.com/my8100/p/js_maoyandianying.html 解析某电影和某招聘网站的web-font自定义字体&#xff1a;https://www.jianshu.com/p/5400bbc8b634 Fo…

c语言中单精度的有效位数是,C语言中的单精度双精度数的有效位数

#include "stdio.h"#include "conio.h"void main(){printf("%.20f\n",0.1234567890123456789f);getch();}观察在VC6&#xff0c;WinTC中的运行结果&#xff0c;可能是0.1234567891043281560000.12345678901234567700而一般在C语言教材上说&#…

Yoshua Bengio团队通过在网络「隐藏空间」中使用降噪器以提高深度神经网络的「鲁棒性」

原文来源&#xff1a;arXiv 作者&#xff1a;Alex Lamb、Jonathan Binas、Anirudh Goyal、Dmitriy Serdyuk、Sandeep Subramanian、Ioannis Mitliagkas、Yoshua Bengio「雷克世界」编译&#xff1a;嗯~是阿童木呀、KABUDA、EVA导语&#xff1a;深度神经网络在各种各样的重要任…

PDF签名系列(1):PDF签名机制的漏洞分析

来源&#xff1a;PDF签名系列(1):PDF签名机制的漏洞分析 - 知乎 研究PDF文件的签名机制有一段时间了&#xff0c;刚开始学习的时候就看到有提到说&#xff0c;被签名的PDF内容的Range gap&#xff0c;会成为这个机制的漏洞&#xff0c;但是一直不能完全参透。直到昨天看到一篇…