快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
mmons.functor.*; import org.apache.commons.functor.core.composite.*; import org.apache.commons.functor.adapter.*; import org.apache.commons.functor.UnaryFunction; import org.apache.commons.functor.core.Constant; import org.apache.commons.functor.core.comparator.Min; public class TestC {   public static void main(String[] args)   {   double discountRate = 0.1;   double taxRate=0.33;   double maxDiscount = 30;   SETLItem item = new SETLItem();   item.setPrice(350);   UnaryFunction calcDiscount =    new RightBoundFunction(new Multiply(), new Double(discountRate));   Constant cap = new Constant(new Double(maxDiscount));   BinaryFunction calcActualDiscount =    new UnaryCompositeBinaryFunction (new Min(), calcDiscount, cap);   BinaryFunctionUnaryFunction calcActualDiscountAsUnary =    new BinaryFunctionUnaryFunction(calcActualDiscount);   BinaryFunction calcDiscountedPrice =    new UnaryCompositeBinaryFunction (new Subtract(), new Identity(), calcActualDiscountAsUnary);   BinaryFunctionUnaryFunction calcDiscountedPriceAsUnary =    new BinaryFunctionUnaryFunction(calcDiscountedPrice);   UnaryFunction calcTax =    new RightBoundFunction(new Multiply(), new Double(1+taxRate));   CompositeUnaryFunction calcNetPrice =    new CompositeUnaryFunction(calcTax, calcDiscountedPriceAsUnary);   Double netPrice = (Double)calcNetPrice.evaluate(new Double(item.getPrice()));   System.out.println("The net price is: " + netPrice);   } }

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

时间:2011-01-31 IBM Abhijit Belapurkar

通过首先观察所使用的 Apache Functor 库中的三个标准仿函数,开始分析和理解这段代码。

UnaryCompositeBinaryFunction 仿函数取一个二元函数和两个一元函数作为输入。首先计算后两个函数,它们的输出作为输入传递给二元函数。在清单 4 中对二元合成使用这个仿函数两次。

Constant 仿函数的计算总是返回一个常量值(即在其构造时输入的值),不管以后任何计算消息中传递给它的参数是什么值。在清单 4 中,变量 cap 的类型为 Constant 并总是返回最大折扣数量。

Identity 仿函数只是返回作为 evaluate 消息的输入参数传递给它的这个对象作为输出。清单 4 显示 Identity 仿函数的一个实例,该仿函数是在创建 calcDiscountedPrice 时作为一个一元仿函数创建和传递的。同时在清单 4 中, evaluate 消息包含标签价格作为其参数,这样 Identity 仿函数就返回标签价格作为输出。

第一个二元合成在用计算 calcDiscount (通过对标签价格直接应用折扣率)和 cap 的 UnaryCompositeBinaryFunction 设置变量 calcActualDiscount 时是可见的。这两个一元仿函数计算的输出传递给称为 Min 的内置二元仿函数,它比较这两者并返回其中最小的值。

这个例子显示了定制类 BinaryFunctionUnaryFunction 。这个类适配一个二元仿函数,使它像一元仿函数的接口。就是说,当这个类接收一个带有一个参数的 evaluate 消息时,它在内部发送 (向其封装的二元函数)一个 evaluate 消息,它的两个参数是作为输入接收的同一个对象。因为 calcActualDiscount 是二元函数,所以通过类型为 BinaryFunctionUnaryFunction 的 calcActualDiscountAsUnary 实例将它包装到一个一元仿函数接口中。很快就可以看到包装

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