快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
ntln("Item1 costs more than Item3!");    else      System.out.println("Item3 costs more than Item1!");   }   catch (Exception e)   {    e.printStackTrace();   }   } }

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

时间:2011-01-31 IBM Abhijit Belapurkar

BinaryPredicate 接口以由 Apache Functor 库提供的 IsGreaterThanOrEqual 类的形式特化。PriceComparator 类实现了 java.util.Comparator 接口,并被作为输入传递给 IsGreaterThanOrEqual 类。收到一个 test 消息时, IsGreaterThanOrEqual 类自动调用 PriceComparator 类的 compare 方法。compare 方法预期接收两个 SETLItem 对象,相应地它返回两个商品的价格差。compare 方法返回的正值表明 item1 的成本不低于 item2 。

初看之下,对一个相当基本的操作要做很多的工作,那它有什么好处呢?特化 BinaryPredicate 接口(而不是编写 Java 比较表达式) 使您无论在何时何地都可以比较任意两个商品的价格。可以将 bp 对象作为数据传递并向它发送消息,以在任何时候、使用这两个参数的任何值来执行它(称为 test )。

表达式合成

表达式合成是得到同样结果的一种稍有不同的技术。考虑计算特定 SETLItem 的净价问题,要考虑当前折扣和销售税率。清单 3 列出了这个问题基于仿函数的解决方式。

清单 3. 表达式合成方法

package com.infosys.setl.fp; import org.apache.commons.functor.BinaryFunction; import org.apache.commons.functor.UnaryFunction; import org.apache.commons.functor.adapter.LeftBoundFunction; public class Multiply implements BinaryFunction {   public Object evaluate(Object left, Object right)   {   return new Double(((Double)left).doubleValue() * ((Double)right).doubleValue());   } } package com.infosys.setl.fp; import org.apache.commons.functor.*; import org.apache.commons.functor.core.composite.*; import org.apache.commons.functor.adapter.*; import org.apache.commons.functor.UnaryFunction; public class TestB {   public static void main(String[] args)   {   try   {     double discountRate = 0.1;    double taxRate=0.33;    SETLItem item = new SETLItem();    item.setPrice(100);    UnaryFunction calcDiscountedPrice =    new RightBoundFunction(new Multiply(), new Double(1-discountRate));    UnaryFunction calcTax =    new RightBoundFunction(new Multiply(), new Double(1+taxRate));    CompositeUnaryFunction calcNetPrice =    new CompositeUnaryFunction(calcTax, calcDiscountedPrice);    Double netPrice = (Double)calcNetPrice.evaluate(new Double(item.getPrice()));    System.out.println("The net price is: " + netPrice);   }   catch (Exception e)   {    e.printStackTrace();   }   } }

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

时间:2011-01-31 IBM Abhijit Belapurkar

BinaryFunction 类似于前面看到的 BinaryPredicate ,是一个由 Apache Functor 提供的一般化仿函数(functor)接口。BinaryFunction 接口有两个参数并返回一个 Object 值。类似地, UnaryFunction 是一个取一个 Object 参数并返回一个 Object 值的仿函数接口。

RightBoundFunction 是一个由 Apache 库提供的适配器类,它通过使用常量右参数(right-side argument)将 BinaryFunction 适配给 UnaryFunction 接口

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