java lambda使用

Apache Commons Functor (以下称为[functor])是一个Apache Commons组件,它提供功能性的编程API和已实现的几种模式(访问者,生成器,聚合器等)。 Java 8具有几个不错的新功能,包括lambda表达式和函数接口 。
在Java 8中,lambdas或lambdas表达式是闭包 ,可以对其进行评估并表现为类似于匿名方法的行为。
功能接口是仅一种方法的接口。 这些接口可以在lambda中使用,并且可以节省编写匿名类甚至实现接口的时间。 [functor]提供了几个功能接口(感谢Matt Benson )。 它尚未发布,但是在项目站点中, SVN的主干中有一些新示例。 我将使用这些示例之一来说明如何将[functor]功能接口与Java 8 lambda结合使用。 在Java 8中带有[functor]的示例之后,我将说明如何在Eclipse中运行Java 8(有点像gambiarra ,但效果很好)。

[functor]例子

这是一个带有谓词的简单示例。

Listnumbers = Arrays.asList(1, 2, 3, 4);UnaryPredicateisEven = new UnaryPredicate() {public boolean test(Integer obj) {return obj % 2 == 0;}
};for( Integer number : numbers ) {if (isEven.test(number)) {System.out.print(number + ' ');}
}

它仅打印通过谓词测试的那些偶数。

Lambdas的[functor]示例

此修改的版本正在使用Java 8 lambdas

List numbers = Arrays.asList(1, 2, 3, 4);UnaryPredicate isEven = (Integer obj) -> { return obj % 2 == 0; };for( Integer number : numbers ) {if (isEven.test(number)) {System.out.print(number + " ");}
}

行为是相同的。 UnaryPredicate是一个功能接口。 它唯一的方法是boolean test(A obj); 。 当在lambda表达式中使用时,您只需要提供正确数量的参数并实现闭包代码即可。

这两个代码段的区别在于创建偶数的UnaryPredicate的方式。 在下面,您可以看到使用和不使用Java 8 lambda的两种创建谓词的方法。

// pre-java-8
UnaryPredicate isEven = new UnaryPredicate() {public boolean test(Integer obj) {return obj % 2 == 0;}
};// with lambda-8
UnaryPredicate isEven = (Integer obj) -> { return obj % 2 == 0; };

Eclipse中的Java 8

Eclipse 8不支持Java 8,因此您必须创建一个新的构建器才能使Eclipse编译项目的源代码。 有关如何设置Eclipse Juno和Java 8的完整分步指南,请参阅http://tuhrig.de/?p=921 。 我将在此处总结步骤,并说明如何将[functor] jar包含到项目类路径中。

  • 从http://jdk8.java.net/lambda下载JDK并安装(我安装在/opt/java/jdk1.8.0中
  • 在Eclipse中创建一个新的Java项目(在我的情况下为try-lambdas
  • 从Eclipse项目中禁用默认的Java Builder ,因为它不适用于Java 8
  • 创建一个新的生成器。 当出现允许您浏览程序的屏幕提示时,选择Java 8 javac(对我来说是/opt/java/jdk1.8.0/bin/javac
  • 将以下参数添加到您的构建器中:
    -classpath %CLASSPATH%;commons-functor-1.0-SNAPSHOT-jar-with-dependencies.jar;.
    -source 8
    -d ${workspace_loc:/lambdas}/bin
    ${workspace_loc:/Java8}/src/lambdas/*.java

您必须包括[functor]的jar及其依赖项。 为了方便起见,我使用maven-assembly-plugin生成了一个带有[functor]依赖项的jar。 可从此GitHub存储库中获取代码和jar。 或者,如果您希望生成具有依赖性的自己的[functor] jar,请从存储库中签出代码,如下所示。

svn checkout https://svn.apache.org/repos/asf/commons/sandbox/functor/trunk/ commons-functor

最后,在运行mvn clean assembly:assembly之前,将以下内容包含到[functor] pom.xml中

<plugin><artifactId>maven-assembly-plugin</artifactId><version>2.3</version><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration>
</plugin>

参考:来自Kinoshita博客博客的JCG合作伙伴 Bruno Kinoshita 将Apache Commons Functor功能接口与Java 8 lambda结合使用 。

翻译自: https://www.javacodegeeks.com/2012/12/using-apache-commons-functor-functional-interfaces-with-java-8-lambdas.html

java lambda使用

java lambda使用_在Java 8 Lambda上使用Apache Commons Functor功能接口相关推荐

  1. 在Java 8 Lambda上使用Apache Commons Functor功能接口

    Apache Commons Functor (以下称为[functor])是一个Apache Commons组件,它提供功能性的编程API和已实现的几种模式(访问者,生成器,聚合器等). Java ...

  2. java 自定义表达式_自定义 Java Lambda

    用了这么久的 Java,也体验了 Java 8 的 lambda 带来的便捷,但是我一直都是直接用,而从未想过他是如何实现的.比如:为什么在小括号里面可以放一个函数作为参数,自己造一个lambda 应 ...

  3. java lambda 反射_反射调用与Lambda表达式调用

    想调用一个方法很容易,直接代码调用就行,这人人都会.其次呢,还可以使用反射.不过通过反射调用的性能会远远低于直接调用--至少从绝对时间上来看的确是这样.虽然这是个众所周知的现象,我们还是来写个程序来验 ...

  4. java 复合方法_《Java 8 实战》Ch3: Lambda表达式(下):类型与限制、方法引用、复合...

    李文轩 2019-04-23 3.5 类型的检查和判断:变量捕获限制 类型检查 Lambda的类型是从使用Lambda的上下文推断出来的. Lambda表达式需要的类型称为目标类型 . Lambda表 ...

  5. java expression 用法_浅析Java 8新特性Lambda Expression

    什么是Lambda Expression 对于Lambda Expression,我的理解是,它是一个函数表达式,如下: (int x, int y) -> x - y 符号左边定义了函数的输入 ...

  6. java核心教程_核心Java教程

    java核心教程 Welcome to Core Java Tutorial. I have written a lot on Core Java and Java EE frameworks. Th ...

  7. aws lambda使用_如何使用AWS Lambda和S3构建无服务器URL缩短器

    aws lambda使用 by Daniel Ireson 丹尼尔·埃里森(Daniel Ireson) 如何使用AWS Lambda和S3构建无服务器URL缩短器 (How to build a S ...

  8. java event 异步_[转]java异步编程

    很多时候我们都希望能够最大的利用资源,比如在进行IO操作的时候尽可能的避免同步阻塞的等待,因为这会浪费CPU的资源.如果在有可读的数据的时候能够通知程序执行读操作甚至由操作系统内核帮助我们完成数据的拷 ...

  9. java高级教程_高级Java教程

    java高级教程 课程大纲 学习Java基础很容易. 但是,真正钻研该语言并研究其更高级的概念和细微差别将使您成为一名出色的Java开发人员. 网络上充斥着"软","便宜 ...

最新文章

  1. Amazon EC2云端服务器的使用方法
  2. Linux(二)各种实用命令
  3. 高质量C /C编程指南---附录B :C /C试题和谜底
  4. php mvc 高性能框架,swoolefy-基于swoole扩展实现的高性能的微服务和mvc框架
  5. python输出变量的值使用_Python捕获任何异常,并使用变量值打印或记录回溯
  6. 为什么李彦宏和雷军在一起了?
  7. 安装win7的小插曲
  8. Kettle——简介
  9. linux系统串口dmx512,基于stm32实现DMX512协议发送与接收详解
  10. uniapp H5微信公众号跳转小程序
  11. 新手建模学习哪一个软件比较好
  12. 开课吧python基础语法-零基础玩转Python
  13. html实现银行卡号输入,Vue中Element-ui 输入银行账号每四位加一个空格的实现代码_飛雲_前端开发者...
  14. Sharepreferences
  15. 2022湖南株洲服饰产业数智互联网峰会暨湖南服饰产业互联网高峰论坛成功举办
  16. 【svn】如何批量忽略文件和文件夹
  17. 提示未登录,点确认,跳到登陆页
  18. 玄学小问题之input.focus()没生效的问题
  19. C语言教程:十进制转换任意进制
  20. 【OR】约束优化:二阶充分条件

热门文章

  1. Java NIO系列教程(十) Java NIO DatagramChannel
  2. 深度解析单例与序列化之间的爱恨情仇
  3. 漫画:什么是八皇后问题
  4. mysql查询优化explain命令详解
  5. Maven精选系列--私库搭建及使用
  6. 用turtle画皮卡丘
  7. 我们在进行着一场拔河比赛……
  8. TRUNCATE vs DELETE命令
  9. jquery对象和DOM对象的相互转换详解
  10. mfc定义了变量仍提示未定义标识符_JavaScript-变量