#paip.提升效率---filter map reduce 的java 函数式编程实现

========================================================

#----------------------index索引------------------

++函数式编程的好处儿以及缺点

++actual code 实际代码如下

---filter 实现...

--- map 实现..

---reduce

---调用



##函数式编程的好处儿以及缺点

----------------------------

从声明式编程 代替  命令式编程 的观点来看,函数式编程是个好东东..why >>>how

大多时间哈,,可以容易的理解..

大多时间哈,更是代码短....



但是,有时候,代码更多,更长的...估计是java7 没实现lambda 表达式造成的吧..

reduce 使用的递归,可能更多的对象生成,,以及堆栈溢出...毕竟,现在的电脑都是基于寄存器的...不是基于堆栈机器..不是基于lambda list机...





作者 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

来源: http://blog.csdn.net/attilax



##actual code 实际代码如下

----------------



###filter 实现...

public static <atiType> atiType filterO4(atiType arr, Func func) {

        // List li = new ArrayList();

        // for (int i = 0; i < objLi.size(); i++) {

        // String string = objLi.get(i);

        // boolean o = (Boolean) func.invoke(string);

        // if (!o)

        // li.add(string);

        // }



        List li = new ArrayList();

        if (arr instanceof String[]) {

            String[] sa = (String[]) arr;

            for (int i = 0; i < sa.length; i++) {

                String charx = sa[i];

                if (!(Boolean) func.invoke(charx))

                    li.add(charx);



            }

            return (atiType) toStrArr(li);

        }

        if (arr instanceof List) {

             List li3=(List) arr;

            for (int i = 0; i <li3.size(); i++) {

                String charx = (String) li3.get(i);

                if (!(Boolean) func.invoke(charx))

                    li.add(charx);



            }

            return (atiType)  (li);

        }



        return null;

    }



    ### map 实现..

    

    public static List<String> mapx(Object li, Func function) {

        List lir = new ArrayList();

        if (li instanceof List) {

            List objLi = (List) li;

            for (int i = 0; i < objLi.size(); i++) {

                Object o = function.invoke(objLi.get(i));



                lir.add(i, o);

            }

        } else {

            Object[] objLi = (Object[]) li;

            for (int i = 0; i < objLi.length; i++) {

                lir.add(function.invoke(objLi[i]));

            }

        }

        return lir;

    }

    

###reduce

public static <atiType,retType> retType reduceO4d(atiType obj,   Func function) {

    

        retType lastVal = null;

        

        if (obj instanceof List) {

            if(lastVal==null)

                lastVal=(retType) new ArrayList();

            

            List objLi = (List) obj;

            for (int i = 0; i < objLi.size(); i++) {

                lastVal =   (retType) function.invoke(lastVal, objLi.get(i));



            }

            return (retType) lastVal;

        }

        return null;

    }

###调用

public static void main(String[] args) {

        String f = "c:\\li.txt";

        List<String> li = filex.read2list(f);

        List<String> li2 = listUtil.reduceO4d(li, new Func() {



            @Override

            public Object invoke(Object... o) {

                List Last = (List) o[0];

                String s = (String) o[1];

                if (s.contains("@")) {

                    String[] a = s.split("\\t");

                    String nowSlect = a[0].trim().replaceAll("@", "");

                    List li_now=listUtil.toList(nowSlect);

                    li_now=listUtil.deDulicate(li_now);

                    return  Last.addAll(li_now);

                }

                return Last;



            }

        });

        filex.saveList2file(li2, "c:\\catch.txt");

    }

paip.提升效率---filter map reduce 的java 函数式编程实现的更多相关文章

  1. paip.提升性能--多核cpu中的java/.net/php/c++编程

    paip.提升性能--多核cpu中的java/.net/php/c++编程 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http ...

  2. paip.提升效率--批量变量赋值 “多元”赋值

    paip.提升效率--批量变量赋值 "多元"赋值 ##石麻是批量变量赋值. 为一组变量赋值. 例子 1 <?php $my_array = array("Dog&q ...

  3. paip.提升效率---request自动绑定domain object

    paip.提升效率---request自动绑定domain object #.keyword,subtitle关键字,子标题 ------------------------- 复制request属性 ...

  4. paip.提升效率--gui 的选择--swing最佳实践swt awt

    paip.提升效率--gui 的选择--swing最佳实践swt awt ////////////////弹出消息框. ////////////////myeclipse swing 开发最佳实践.. ...

  5. Python经常使用内置函数介绍【filter,map,reduce,apply,zip】

    Python是一门非常简洁,非常优雅的语言,其非常多内置函数结合起来使用,能够使用非常少的代码来实现非常多复杂的功能,假设相同的功能要让C/C++/Java来实现的话,可能会头大,事实上Python是 ...

  6. filter,map,reduce,lambda(python3)

    1.filter filter(function,sequence) 对sequence中的item依次执行function(item),将执行的结果为True(符合函数判断)的item组成一个lis ...

  7. paip.提升效率--数据绑定到table原理和流程Angular js jquery实现

    paip.提升效率--数据绑定到table原理和流程Angular js  jquery实现 html #--keyword 1 #---原理和流程 1 #----jq实现的代码 1 #-----An ...

  8. paip.提升效率--调试--日志系统日志参数含义---python

    paip.提升效率--调试--日志系统日志参数含义---python #同时向控制台和文件输出日志 #日志参数含义 import logging log_format = '%(filename)s ...

  9. paip.提升效率--僵尸代码的迷思

    paip.提升效率--僵尸代码的迷思 僵尸代码是指你的代码库里被注释掉的那部分代码, 很少去使用它,就像僵尸一样, 看雷kill-the-zombies-in-your-code ========== ...

随机推荐

  1. 解决IE上登陆oracle OEM时报:“证书错误,导航已阻止”的错误

    今天在IE上登陆OEM时,报证书错误,导航已阻止,我选择:继续浏览此网站(不推荐),但是点了之后还没有反应,在网上搜了很多,原因基本都是windows的问题,最后发现问题是:oracle oem证书的 ...

  2. c#:未将对象引用设置到对象的实例--可能出现的问题总结(转)

    1.c#:未将对象引用设置到对象的实例--可能出现的问题总结(转):http://www.cnblogs.com/KeenLeung/archive/2013/06/23/3150578.html

  3. linux ddos防御攻击

    Linux Ddos防御攻击 [root@lxh ~]# netstat -ntu |awk '{print $5}'|grep '[0-9]'|cut -d: -f1 |sort |uniq -c| ...

  4. 彻底卸载sublime txt

    最近彻底重装系统之后,安装sublime txt3, 自己设置了一些,总是觉得不是很对劲,想重新安装. 结果每次安装之后,总是有一些配置文件和卸载之前的是一样的,重复几次总是如此,于是网上搜资料,怎么 ...

  5. Python-Windows下安装BeautifulSoup和requests第三方模块

    http://blog.csdn.net/yannanxiu/article/details/50432498 首先给出官网地址: 1.Request官网 2.BeautifulSoup官网 我下载的 ...

  6. sprintf()函数基本用法

    基本用法 sprintf 是个变参函数,定义如下: int sprintf( char *buffer, const char *format [, argument] ... ); sprintf的 ...

  7. 【转】HTTP状态码(HTTP Status Code)

    原文链接:http://www.chaoji.com/features/httpstatus.aspx 一些常见的状态码为: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - ...

  8. 2600: [Ioi2011]ricehubh

    Description 乡间有一条笔直而长的路称为"米道".沿着这条米道上 R 块稻田,每块稻田的坐标均为一个 1 到 L 之间(含 1 和 L)的整数.这些稻田按照坐标以不减的顺 ...

  9. VO,DO,DTO,PO,POJO,EJB

    PO:persistent Object,持久化对象,和数据库一一对应. VO:view Object,视图对象,用于展示,把某个页面或者组件的数据封装起来. DO:Domain Object,领域对 ...

  10. Linux 修改IP地址

    vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" BOOTPROTO="static" #静 ...