函数式编程之实践

Posted Hadoop大数据开发

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数式编程之实践相关的知识,希望对你有一定的参考价值。

本示例代码全部使用java编写,目的是为了实践类scala函数式编程,或java中stream之后进行的函数式方法调用【注:java8之后才开始支持函数式编程及lambda表达式】

主要实践三个方法 map、reduce、flatMap

map:对集合中的每一个元素做映射,结果返回新的集合或数组,要求能链式调用,且使用泛型

reduce:对集合中的元素进行聚合

flatMap:对集合中的元素做映射,并将处理后的元素(数组)进行压平,炸裂,得到所有数组中的所有元素

代码实践:

MyList类:

package demo; import scala.Function2; import java.util.ArrayList;import java.util.Arrays; /** * @author:tom * @Date:Created in 11:54 2020/12/20 */public class MyList<E> extends ArrayList<E> {  public <B> MyList<B> map(Function1<E, B> function1) { MyList<B> nList = new MyList<>(); for (E e : this) { B b = function1.apply(e); nList.add(b); } return nList; }  public E reduce(Function2<E, E, E> function2) { MyList<E> nList = new MyList<>(); boolean isFirst = true; E temp = null; for (E e : this) { if (isFirst) { temp = e; isFirst = false; } else { temp = function2.apply(temp, e); } } return temp; }  public MyList<E> flatMap(Function1<E, E[]> function1) {  MyList<E> nList = new MyList<>(); for (E e : this) { E[] apply = function1.apply(e); nList.addAll(Arrays.asList(apply)); } return nList; } }

Function1 接口:

package demo; /** * @author:tom * @Date:Created in 11:55 2020/12/20 */public interface Function1<A, B> { B apply(A a); }

Function2 接口:

package demo; /** * @author:tom * @Date:Created in 12:19 2020/12/20 */public interface MyFunction2<A, B, C> { C apply(A a, B b);}

Test类:

测试map方法:

测试结果:

函数式编程之实践

测试reduce方法:

函数式编程之实践

测试结果:

函数式编程之实践

测试flatMap方法:

测试结果:

以上是关于函数式编程之实践的主要内容,如果未能解决你的问题,请参考以下文章

函数式编程的Java编码实践:利用惰性写出高性能且抽象的代码

函数式编程的Java编码实践:利用惰性写出高性能且抽象的代码

一次函数式编程实践

函数式编程

python之函数式编程

函数式编程实践