您的位置:首页 > 移动开发

IMF 自定义Reduce函数,学习理解Apply、callback函数、泛型类型、iterator迭代器

2016-05-27 15:48 465 查看
IMF 自定义Reduce函数,学习理解Apply、callback函数

 

泛型:可以定义为各种类型,使用大写字母标识,名称自己随便定义了。

 

apply函数,就理解成一个普通函数吧,在一个接口中定义,无具体的实现方法,具体内容在匿名接口方法中去实现。这里有点类似Spark Streaming电商广告点击综合案例底层数据层的建模和编码实现(基于MySQL) 中的callback,异曲同工之妙。

Iterable:迭代器,Iterable.next依次取得迭代器的值

 

 

package com.dt.spark.SparkApps.SparkStreaming;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class IMFReduce {

public static MYT myIMFreduce(final Iterable iterable, final Func func, MYT origin) {

for (Iterator iterator = iterable.iterator(); iterator.hasNext();) {
origin = func.IMFapply((MYF) (iterator.next()), origin);

}

return origin;
}

public static void main(String[] args) {
System.out.println("=======IMF reduce===========!");
List people = new ArrayList();
people.add(new Person("张三", 21));
people.add(new Person("李四", 25));
people.add(new Person("王五", 38));
people.add(new Person("小李", 24));

Integer maxAge = IMFReduce.myIMFreduce(people, new Func() {
int countAge =0;
public Integer IMFapply(Person person, Integer origin) {
countAge += person.getAge();
return countAge;
}

},22);
System.out.println("myIMFreduce 汇总年龄累计"+maxAge);

}

public interface Func {

T IMFapply(F currentElement, T origin);
}

}

class Person {
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

private String name;
private int age;

public Person(String name, int age) {
this.name = name;
this.age = age;
}
}

 

运行结果:

=======IMF reduce===========!

myIMFreduce 汇总年龄累计108
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: