java代码实现mapreduce中的map、reduce、filter方法

时间:2019-01-18
本文章向大家介绍java代码实现mapreduce中的map、reduce、filter方法,主要包括java代码实现mapreduce中的map、reduce、filter方法使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

实现代码如下:

public class MyList {
    public static void main(String[] args) {
        List<Integer>  aa =new ArrayList<>();
        aa.add(1);
        aa.add(2);
        aa.add(3);
        oneselfList list=new oneselfList(aa);
//        调用map方法
        System.out.println("调用map执行完成的结果");
        list.map(new mymaps() {
            @Override
            public int maptest(int a) {
                return  a+1;
            }
        }).forEach(System.out::println);
//        调用reduce方法
        System.out.println("调用reduce执行完成的结果");
   int  sum =list.reduce(new myreduce() {
          @Override
          public int reducetest(int a, int b) {
              return a+b;
          }
      });
   System.out.println(sum);
//   调用filter方法
        System.out.println("调用filter执行完成的结果");
     list.filtertest(new myfilter() {
            @Override
            public boolean filter(int a) {
                return  a>2;
            }
        }).forEach(System.out::println);
    }
}
class oneselfList{
    private  List<Integer> list;
    public  oneselfList(List<Integer> alist){
       this.list=alist;
   }
    public void add (int a){
        list.add(a);
    }
//map方法
    public List<Integer> map(mymaps mapop){
        List<Integer> newlist=new ArrayList<>();
        for(Integer i : list){
            newlist.add(mapop.maptest(i));
        }
        return newlist;
    }
//    reduce方法
    public int reduce(myreduce reduce){
        if(list.size()<2){

            try {
                throw  new Exception("长度不够,无法进行聚合");

            } catch (Exception e) {
                e.printStackTrace();
            }
        }else{
            int a=list.get(0);
            int b=list.get(1);
            int result=reduce.reducetest(a,b);
            for(int i=2;i<list.size();i++){
                result=reduce.reducetest(result,list.get(i));
            }
            return result;
        }
        return 0;
    }
//    filter方法
    public List<Integer>  filtertest(myfilter filter){
        List<Integer> newlist=new ArrayList<>();
          for(Integer i:list){
              if(filter.filter(i)){
                 newlist.add(i);
              }
          }
          return newlist;
    }

}
interface  mymaps{
     int maptest(int i);
}
interface myreduce{
    int reducetest(int a,int b);
}
interface myfilter{
   boolean filter(int a);
}