快速业务通道

Java语言中的函数编程 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
数传递到底层集合中的对象还未存在的话,该方法就添加它。

不过,当集合中的元素共享某些公共属性时,通过声明惟一地标识了集合中元素的属性可以更高效地描述集合的成员关系。例如,后一种解决方案适合于集合成员的数量很大,以致不能在内存中显式地维护一个集合实现(像前一种方式那样)的情况。

在这种情况下,可以用一个一元 谓词 表示这个集合。显然,一个一元 谓词 隐式定义了一组可以导致谓词计算为 true的所有值(对象)。事实上,所有集合操作都可以用不同类型的谓词组合来定义。清单 7 中展示了这一点:

清单 7.使用仿函数的集合操作

package com.infosys.setl.fp; import org.apache.commons.functor.UnaryPredicate; import org.apache.commons.functor.core.composite.UnaryAnd; import org.apache.commons.functor.core.composite.UnaryNot; import org.apache.commons.functor.core.composite.UnaryOr; public class SetOps  {   public static UnaryPredicate union(UnaryPredicate up1, UnaryPredicate up2)   {   return new UnaryOr(up1, up2);   }   public static UnaryPredicate intersection(UnaryPredicate up1, UnaryPredicate up2)   {   return new UnaryAnd(up1, up2);   }   public static UnaryPredicate difference(UnaryPredicate up1, UnaryPredicate up2)   {   return new UnaryAnd(up1, new UnaryNot(up2));   }   public static UnaryPredicate symmetricDifference(UnaryPredicate up1,    UnaryPredicate up2)   {   return difference(union(up1, up2), intersection(up1, up2));   } }

用一元 谓词 来描述集合 并集(union) 和 交集(intersection) 操作的定义应当是明确的:如果一个对象至少使指示两个集合的两个一元 谓词 中的一个计算为 true,那么这个对象就属于两个集合的并集(逻辑 Or );如果它使两个一元 谓词 都计算为 true,那么它就属于两个集合的交集(逻辑 And )。

两个集合的差在数学上定义为属于第一个集合但是不属于第二个集合一组元素。根据这个定义,静态方法 difference 也容易理解。

最后,两个集合的对称差(symmetric difference)定义为只属于两个集合中的一个(或者两个都不属于)的所有元素。这可以取两个集合的并集,然后从中删除属于两个集合的交集的元素得到。就是说,它是对原来的集合(在这里是一元 谓词 )使用 union 和 intersection 操作分别得到的两个集合的 difference 操作。后一个定义解释了为什么用前三种方法作为第四个方法中的构建块。

结束语

模块化是任何平台上高生产率和成功的编程的关键,这一点早已被认识到了。Java 开发人员的问题是模块化编程不仅是将问题分解,它还要求能将小的解决方案粘接到一起,成为一个有效的整体。由于这种类型的开发继承了函数编程范型,在 Java 平台上开发模块化代码时使用函数编程技术应是很自然的事。

在本文中,我介绍了两种函数编程技术,它们可以容易地结合到 Java 开发实践中。正如从这里看到的,闭包和高阶函数对于 Java 开发人员来说并不是完全陌生的,它们可以有效地结合以创建一些非常有用的模块化解决方案。

我希望本文提供了在 Java 代码中结合闭包和高阶函数的很好基础,并使您见识到了函数编程的优美和效率。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号