函数式编程之实践
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编码实践:利用惰性写出高性能且抽象的代码