java ab工具

如果您正在使用更高级的语言(例如Scala或Ceylon,甚至JavaScript)进行编程,则“嵌套函数”或“本地函数”是您非常常见的习惯用法。 例如,您将编写诸如fibonacci函数之类的东西:

def f() = {def g() = "a string!"g() + "– says g"
}
  • ( 来自Aaron Yodaiken的堆栈溢出问题 )

f()函数包含一个嵌套的g()函数,该函数在外部f()函数的作用域内是局部的。

在Java中,无法创建这样的局部函数,但是您可以将lambda表达式分配给局部变量,然后使用它。

上面的示例可以转换为以下Java代码:

String f() {Supplier<String> g = () -> "a string!";return g.get() + "- says g";
}

尽管这个例子很简单,但测试用例却更为有用。 例如,请考虑以下jOOλ单元测试 ,它检查是否Stream.close()的语义正确跨越各种jOOλ实施Seq方法,即两股合并为一个:

@Test
public void testCloseCombineTwoSeqs() {Consumer<BiFunction<Stream<Integer>, Stream<Integer>, Seq<?>>> test = f -> {AtomicBoolean closed1 = new AtomicBoolean();AtomicBoolean closed2 = new AtomicBoolean();Stream s1 = Stream.of(1, 2).onClose(() -> closed1.set(true));Stream s2 = Stream.of(3).onClose(() -> closed2.set(true));try (Seq s3 = f.apply(s1, s2)) {s3.collect(Collectors.toList());}assertTrue(closed1.get());assertTrue(closed2.get());};test.accept((s1, s2) -> seq(s1).concat(s2));test.accept((s1, s2) -> seq(s1).crossJoin(s2));test.accept((s1, s2) -> seq(s1).innerJoin(s2, (a, b) -> true));test.accept((s1, s2) -> seq(s1).leftOuterJoin(s2, (a, b) -> true));test.accept((s1, s2) -> seq(s1).rightOuterJoin(s2, (a, b) -> true));
}

局部函数是test ,它接受两个Stream<Integer>参数,产生一个Seq<?>结果。

为什么不只写私有方法呢?

当然,这也可以通过私有方法(经典的Java风格)解决。 但是有时候,使用局部作用域会更加方便,因为测试Consumer (局部功能)无法逃脱该单个单元测试的作用域。 仅应在此单一方法内使用。

另一种更经典的Java方法是定义一个本地类,然后将函数放入其中。 但是这种解决方案更加精益。

但是,一个缺点是,在Java中,以这种方式实现递归要困难得多。

  • 另请参阅: http : //stackoverflow.com/q/19429667/521799

翻译自: https://www.javacodegeeks.com/2016/02/abusing-java-8-functionalinterfaces-local-methods.html

java ab工具

java ab工具_(ab)使用Java 8 FunctionalInterfaces作为本地方法相关推荐

  1. linux java远程调试_[转]JPDA:Java平台调试架构(常用的远程调试方法)

    原文出处:http://www.javaeye.com/topic/75128 最近使用WTP的Server功能很不爽,连tomcat服务器时java类中的任何改动都要重启服务器,一怒之下就改用JPD ...

  2. java自带工具_深入了解Java JDK自带工具,包括javac、jar、jstack等,实用~

    在Java JDK的安用装目录bin下,有一些有非常实用的小工具,可用于分析JVM初始配置.内存溢出异常等问题,我们接下来将对些常用的工具进行一些说明. JDK小工具简介 在JDK的bin目录下面有一 ...

  3. java 接口文档工具_一款Java基于注释的接口文档生成工具

    一. 痛点 你还在手动维护接口文档嘛,花一个下午不停的复制粘贴代码里面的注释 接口字段变动,还得去更新文档,更新不及时导致文档不同步 或者你使用了swagger之类的基于注解,依靠运行时的文档工具,看 ...

  4. java 集成开发工具_最好的Java开发人员测试和集成工具

    java 集成开发工具 通过从您的应用程序学习企业APM产品,发现更快,更有效的性能监控. 参加AppDynamics APM导览! 无论您是刚刚起步还是已经从事了一段时间,使用正确的工具进行编程都可 ...

  5. 玩转java并发工具_玩Java并发

    玩转java并发工具 最近,我需要将一些文件(每个文件都有JSON格式的对象列表(数组))转换为每个文件都具有相同数据(对象)的分隔行的文件. 这是一次性的任务,很简单. 我使用Java nio的某些 ...

  6. 轻量级java开发工具_成为 Java 程序员必备的 5 个工具

    简介:Java 是一门面向对象的编程语言,它有着简单性.分布式.健壮性.安全性.可移植性.多线程等诸多特点.它也在最近一次的编程语言排行榜中排名第一,并且是连续十二次位居榜首,也就是说 Java 在2 ...

  7. java profiler 工具_(转)Java应用性能分析工具:async-profiler

    环境准备 首先,你需要从github将代码下载下来: git clone https://github.com/jvm-profiling-tools/async-profiler 然后,进入到下载好 ...

  8. java虚拟机现状_深入理解java虚拟机的故障处理工具

    前言 本文主要给大家介绍的是java虚拟机的故障处理工具,文中提到这些工具包括: 名称 主要作用 jps JVM process Status Tool, 显示指定系统内所有的HotSpot虚拟机进程 ...

  9. java反编译工具_如何保护Java程序 才能防止Java反编译

    简介:Java是一种跨平台的.解释型语言.Java 源代码编译中间"字节码"存储于class文件中.Class文件是一种字节码形式的中间代码,该字节码中包括了很多源代码的信息,例如 ...

最新文章

  1. Numpy生成二项分布随机数
  2. mysql中my.cnf文件_MySQL中my.cnf文件选项
  3. hadoop 启动提示输入password的问题
  4. 接口——Serializable
  5. 薅羊毛丨5个平价好物,终于终于终于打折了!
  6. 如何让面试官认可你的简历
  7. c++ 23种设计模式_如何用一句话总结23种设计模式
  8. openstack学习之路-python运维(network)
  9. TP框架Queue队列使用
  10. 2019最新Python学习路线(Python学习教程_Python学习视频):Python2和Python3你们都是怎么选的?
  11. 编译CM-MK802
  12. css 拉伸 resize —— 实现可拉伸的div(含限制拉伸的尺寸)
  13. 「用ChatGPT搞钱年入百万!」各路博主发布生财之道,网友回呛:答辩的搬运工...
  14. CCF推荐|中科院2区生物信息与计算机类SCI征稿~
  15. Python 常用的标准库以及第三方库
  16. pytorch的DP和DDP
  17. 机械手标定旋转中心偏移公示推导
  18. 会声会影x4素材_会声会影2020旗舰版Corel VideoStudio Ultimate 2020中文版
  19. 2010年安防企业与事件盘点
  20. qrc路径_QT中添加的资源文件qrc时的路径问题小结

热门文章

  1. bzoj#4423-[AMPPZ2013]Bytehattan【并查集】
  2. 欢乐纪中A组赛【2019.8.17】
  3. 欢乐SSL初二组周六赛【2019.5.11】
  4. nssl1258-naive的瓶子【贪心】
  5. 【图论】【最短路】【SPFA】香甜的黄油 Sweet Butter (luogu 1828)
  6. Codeforces 235C
  7. 汇编语言(二十四)之输出n行星号
  8. JSP的<c:foreach/>标签只输出一次标签体内容的坑
  9. 非常有用的并发控制-倒计时器CountDownLatc
  10. 今天,我们就来抽个奖!