WEB开发网
开发学院软件开发Java Java 语言中的函数编程 阅读

Java 语言中的函数编程

 2009-11-12 00:00:00 来源:WEB开发网   
核心提示: BinaryPredicate 接口以由 Apache Functor 库提供的 IsGreaterThanOrEqual 类的形式特化, PriceComparator 类实现了 java.util.Comparator 接口,Java 语言中的函数编程(7),并被作为输入传递给 IsGrea

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(); 
 } 
 } 
} 

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:Java 函数

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接