小编典典

据我所知,只有两种功能,破坏性的和建设性的。

顾名思义,建设性功能可以构造某些东西,而破坏性功能可以破坏某些东西,但是不会像您现在想的那样。

例如功能

Function f = (x,y) -> x + y

是 建设性的 。如您需要构造的东西。在示例中,构造了元组 (x,y)

。构造函数具有无法处理无限参数的问题。但最糟糕的是,您不能只留下一个争论。您不能只说“好吧,让x:= 1”并尝试每个可能尝试的y。您必须每次使用构造整个元组

x := 1。因此,如果您想查看函数返回的内容,y := 1, y := 2, y := 3则必须编写f(1,1) , f(1,2) ,

f(1,3)。

在Java

8中,应该使用方法引用来处理构造函数(大部分时间),因为使用构造性lambda函数没有太多优势。它们有点像静态方法。您可以使用它们,但是它们没有真实状态。

另一种是破坏性的,需要采取一些措施并根据需要将其拆除。例如, 破坏性 功能

Function> g = x -> (y -> x + y)

与具有f建设性的功能相同。破坏性函数的好处是,您现在可以处理无限个参数,这对于流来说特别方便,并且您可以仅打开参数。因此,如果您再次想查看if x

:= 1和if的结果y := 1 , y := 2 , y := 3,您可以说h = g(1)and h(1)是for y :=

1,h(2)for y := 2和h(3)for 的结果y := 3。

所以这里您有一个固定的状态!这是非常动态的,并且在大多数情况下是我们从lambda中想要的。

如果您只需放入一个可以为您完成工作的函数,那么像Factory这样的模式就容易得多。

破坏性元素很容易彼此结合。如果类型正确,则可以根据需要进行组合。使用它,您可以轻松定义使(具有不变的值)测试变得容易得多的态射!

您也可以用一个建设性的结构来做到这一点,但是破坏性的结构看起来更好,更像是列表或装饰器,而建设性的结构看起来很像一棵树。带有构造函数的回溯之类的事情就不好了。您可以只保存破坏性函数的部分功能(动态编程),而在“回溯”中仅使用旧的破坏性功能。这使代码更小,更易读。使用构造函数,您或多或少会记住所有参数,这可能很多。

那么,为什么需要BiFunction更多的问题而不是为什么没有问题TriFunction呢?

首先,很多时候您只有几个值(小于3)并且只需要一个结果,因此根本不需要常规的破坏函数,而建设性函数就可以了。诸如monad之类的东西确实需要构造功能。但是除此之外,实际上并没有很多充分的理由说明为什么会有一个BiFunction。这并不意味着应该将其删除!我为我的Monad战斗,直到我死!

因此,如果您有很多参数,不能将它们组合到一个逻辑容器类中,并且您需要函数具有构造性,请使用方法引用。否则,尝试使用新获得的破坏性功能,您可能会发现自己用更少的代码行来做很多事情。

2020-09-16

java中function_Java 8:java.util.function中的TriFunction(和亲属)在哪里?还是有什么选择?...相关推荐

  1. Function接口 – Java8中java.util.function包下的函数式接口

    作者:   Mohamed Sanaulla  译者: 李璟(jlee381344197@gmail.com) 早先我写了一篇<函数式接口>,探讨了Java8中函数式接口的用法.如果你正在 ...

  2. java.util接口_Java 8中java.util.function包中的谓词和使用者接口

    java.util接口 在上一篇文章中,我写了关于Function接口的内容 ,它是java.util.package的一部分. 我还提到了Predicate接口,它是同一包的一部分,在这篇文章中,我 ...

  3. java.util接口_函数接口– Java 8中java.util.function包中的函数接口

    java.util接口 我以前写过有关功能接口及其用法的文章. 如果您正在探索要成为Java 8一部分的API,尤其是那些支持lambda表达式的API,您会发现很少的接口,例如Function,Su ...

  4. Java 8中java.util.function包中的谓词和使用者接口

    在我以前的文章中,我写了关于Function接口的内容 ,它是java.util.package的一部分. 我还提到了Predicate接口,它是同一包的一部分,在这篇文章中,我将向您展示如何使用Pr ...

  5. 函数接口– Java 8中java.util.function包中的函数接口

    我以前写过有关功能接口及其用法的文章. 如果您正在探索要成为Java 8一部分的API,尤其是那些支持lambda表达式的API,您会发现很少的接口,例如Function,Supplier,Consu ...

  6. [Google Guava] 2.3-强大的集合工具类:java.util.Collections中未包含的集合工具

    原文链接 译文链接 译者:沈义扬,校对:丁一 尚未完成: Queues, Tables工具类 任何对JDK集合框架有经验的程序员都熟悉和喜欢java.util.Collections包含的工具方法.G ...

  7. 关于学习java函数式接口Function中的apply方法的一些感悟

    起因是这样的,学习函数式编程的时候学到了Function接口,对于其中的apply方法感到不解,下面贴上我的不解代码 在这里插public class Function接口 {public stati ...

  8. 取java.sql.date日期_JAVA 处理时间 - java.sql.Date、java.util.Date与数据库中的Date字段的转换方法[转]...

    1.如何将java.util.Date转化为java.sql.Date? 转化: java.sql.Date sd; java.util.Date ud; //initialize the ud su ...

  9. java logging包_用JDK中提供的java.util.logging.*包创建Logger对象----原创

    由于项目中用到了Applet与Servlet之间(客户端用Applet.Server端用Servlet)的通信,要求: 1:>客户端与服务端必须出Log. 2:>浏览器在加载Applet时 ...

最新文章

  1. ANT无线通信技术(2) 通道配置
  2. 《数据结构》知识点Day_03
  3. AJPFX学习笔记JavaAPI之String类
  4. 信号处理专业名词术语
  5. hdu 2824The Euler function
  6. docker 主进程 日志_运维笔记--docker高效查看后台日志
  7. Java校招面试经验汇总,最终入职阿里
  8. sql求平均日活_日活、周活(周重活)、月活 统计
  9. 第5章 见缝插针(《C和C++游戏趣味编程》配套教学视频)
  10. mysql root用户可以同时几个人连接_重学MySQL系列(四):10分钟快速掌握MySQL用户与权限管理
  11. android切图双数,浅谈网页设计切图规范
  12. sql2012官网下载地址
  13. Bounds(包围盒)详解-【AABB包围盒、Sphere包围球、OBB方向包围盒、FDH固定方向凸包】
  14. 【课程设计】俄罗斯方块游戏,重温经典(源码 + 详解)
  15. a4如何打印双面小册子_用word如何打印小册子(一张A4打两张那种的)
  16. Installshield 安装包安装过程中遇到的报错(一)
  17. Content-Type一览 1
  18. 当Java、C++、Python等编程语言都变成软妹子
  19. Docker在Centos7安装、及命令(详细安装教程)
  20. ubuntu系统root权限登录下载系统内文件

热门文章

  1. Make sure the device specification refers to a valid device
  2. device:GPU:0 but available devices are [ /job:localhost/replica:0/task:0/dev
  3. Swing实现全屏(覆盖任务栏和不覆盖任务栏)
  4. 华为_H3C_Juniper设备常规巡检命令
  5. vue 输入框限制3位小数_vue+element 中 el-input框 限制 只能输入数字及几位小数(自定义)和输入框之键盘...
  6. 微信在诺基亚手机登录服务器繁忙,马化腾正式宣布:禁止在该手机上登录QQ和微信?网友:诺基亚再见...
  7. cruzer php sandisk 闪迪u盘量产工具_SanDisk Cruzer Micro下载
  8. js判断undefined和null
  9. oracle数据库从关闭到启动,Oracle数据库的启动和关闭详细过程
  10. 电脑常见问题_电脑知识,每日一课,计算机常用维修小技巧