函数式编程
2016-05-25 20:56
260 查看
使用Function接口
函数式编程强调使用函数,以实现其目标与不断变化的状态。这与大多数开发者熟悉的改变状态的编程方式形成对比。Function接口让我们在java代码当中引入函数式编程成为可能。
Function接口当中只有2个方法:
我们不会具体的使用equals方法来判断A对象与B对象是否相等,只会调用apply方法来比较A对象与B对象是否相等。apply方法接受一个参数并且返回一个对象。一个好的功能实现应该没有副作用,这意味着当一个对象传入到apply方法当中后应该是保持不变的。下面是一个接受Date对象并且返回Date格式化后字符串的例子:
在这个例子当中,我们可以清楚看到Date对象正在通过SimpleDateFormat类转换成我们期望格式的字符串。虽然这个例子可能过于简单,但是它演示了Function接口的作用,转换一个对象并且隐藏了实现的细节。通过这个例子我们可以使用实现了Function接口的类,我们也可以使用匿名类来实现。看看下面的例子:
这2个例子没什么不同。一个是简单的实现了Function接口,另一个是匿名类。实现了Function接口的类的优点是,你可以使用依赖注入来传递一个函数接口到一个协作的类中,使得代码高内聚。
函数式编程强调使用函数,以实现其目标与不断变化的状态。这与大多数开发者熟悉的改变状态的编程方式形成对比。Function接口让我们在java代码当中引入函数式编程成为可能。
Function接口当中只有2个方法:
public interface Function<F,T> { T apply(F input); boolean equals(Object object); }
我们不会具体的使用equals方法来判断A对象与B对象是否相等,只会调用apply方法来比较A对象与B对象是否相等。apply方法接受一个参数并且返回一个对象。一个好的功能实现应该没有副作用,这意味着当一个对象传入到apply方法当中后应该是保持不变的。下面是一个接受Date对象并且返回Date格式化后字符串的例子:
public class DateFormatFunction implements Function<Date,String> { @Override public String apply(Date input) { SimpleDateFormat dateFormat = new SimpleDateFormat("dd/mm/yyyy"); return dateFormat.format(input); } }
在这个例子当中,我们可以清楚看到Date对象正在通过SimpleDateFormat类转换成我们期望格式的字符串。虽然这个例子可能过于简单,但是它演示了Function接口的作用,转换一个对象并且隐藏了实现的细节。通过这个例子我们可以使用实现了Function接口的类,我们也可以使用匿名类来实现。看看下面的例子:
Function<Date,String> function = new Function<Date, String>() { @Override public String apply( Date input) { return new SimpleDateFormat("dd/mm/yyyy").format(input); } };
这2个例子没什么不同。一个是简单的实现了Function接口,另一个是匿名类。实现了Function接口的类的优点是,你可以使用依赖注入来传递一个函数接口到一个协作的类中,使得代码高内聚。
相关文章推荐
- Python3 迭代器与生成器
- godep 包管理工具
- C++作业6
- Java 实现导出excel表 POI
- 使用ThinkPHP框架快速搭建网站(通俗易懂)
- java设计模式-组合模式
- C++第六次实验———循环复习
- java基础 -- 多线程总结(一)--基本概念
- 山东省第六届ACM省赛题——BIGZHUGOD and His Friends II(塞瓦定理,二分求解方程)
- PHP需注意的10个特性
- Singleton in C++11 style
- wxpython学习笔记(一)
- 【转】spring bean的生命周期
- c++ 中断线程
- 俄罗斯方块游戏软件 : C语言初步应用感受
- python switch 实现
- python之os模块
- 漂亮的代码3:flatten 一个数组
- C++第六次作业
- Gof 设计模式 结构型