快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
em.out.println("The sum calculated using Internal Iterator is: " +    t.calcPriceInternalIterator(items));   }   public int calcPriceExternalIterator(List items)   {   int runningSum = 0;   Iterator i = items.iterator();   while (i.hasNext())   {     int itemPrice = ((SETLItem)i.next()).getPrice();    if (itemPrice >= 100)   runningSum += itemPrice;   }   return runningSum;   }   public int calcPriceInternalIterator(List items)   {   Iterator i = items.iterator();   UnaryFunction getItemPrice =   new UnaryFunction()   {   public Object evaluate (Object obj)   {   return new Double(((SETLItem)obj).getPrice()); }   };   Constant usd100 = new Constant(new Double(100));   BinaryPredicateUnaryPredicate moreThanUSD100 = new BinaryPredicateUnaryPredicate    (new UnaryCompositeBinaryPredicate(new IsGreaterThanOrEqual(), getItemPrice, usd100));   FilteredIterator fi = new FilteredIterator(i, moreThanUSD100);   Summer addPrice = new Summer();   Algorithms.foreach(fi, addPrice);   return addPrice.getSum();   }   static class Summer implements UnaryProcedure   {   private int sum=0;   public void run(Object obj)   {    sum += ((SETLItem)obj).getPrice();   }   public int getSum()   {    return sum;   }   } }

Java语言中的函数编程(8)

时间:2011-01-31 IBM Abhijit Belapurkar

在 main() 方法中,设置一个有 10 种商品的列表,其中奇数元素的价格为 101 美元。(在真实应用程序中,将使用调用 JDBC 获得的 ResultSet 而不是本例中使用的 Vector 。)

然后用两种不同的方法对列表执行所需要的操作: calcPriceExternalIterator 和 calcPriceInternalIterator 。正如其名字所表明的,前者基于 ExternalIterator 而后者基于 InternalIterator 。您将关心后一种方法,因为所有 Java 开发人员都应该熟悉前者。注意 InternalIterator 方法使用由 Apache Functor 库提供的两个结构。

第一个结构称为 FilteredIterator 。它取一个迭代器加上一个一元 谓词 作为输入,并返回一个带有所感兴趣的属性的 Iterator 。这个属性给出了在遍历 Iterator 时遇到的每一个满足在 谓词 中规定的条件的元素。(因此由 FilteredIterator 的一个实例返回的 Iterator 可以作为 FilteredIterator 的第二个实例的输入传递,以此类推,以设置过滤器链,用于根据多种标准分步挑出元素。)在本例中,只对满足 一元谓词 “大于或等于 100 美元”规则的商品感兴趣。这种规则是在名为 moreThanUSD100 的 BinaryPredicateUnaryPredicate 中规定的,我们在 清单 5中第一次遇到了它。

Apache Functor 库提供的第二个结构是名为 Algorithms 的实用程序类,在 前面描述 过这个类。在这个例子中,名为 Summer 的一元过程只是包含传递给它的 SETLItem 实例的定价,并将它添加到(本地)运行的 total 变量上。这是一个实现了前面讨论的内部迭代器概念的类。

使用仿函数进行集合操纵

我讨论了用仿函数和高阶函数编写模块的大量基础知识。我将用最后一个展示如何用仿函数实现集合操纵操作的例子作为结束。

通常,有两种描述集合成员关系的方式。第一种是完全列出集合中的所有元素。这是 Java 编程人员传统上使用的机制 ── java.util.Set 接口提供了一个名为 add(Object) 的方法,如果作为参

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号