zoukankan      html  css  js  c++  java
  • paip.提升效率---filter map reduce 的java 函数式编程实现


    #paip.提升效率---filter map reduce 的java 函数式编程实现
    ========================================================
    #----------------------index索引------------------
    ++函数式编程的优点儿以及缺点
    ++actual code 实际代码例如以下
    ---filter 实现...
    --- map 实现..
    ---reduce
    ---调用

    ##函数式编程的优点儿以及缺点
    ----------------------------
    从声明式编程 取代  命令式编程 的观点来看,函数式编程是个好东东..why >>>how
    大多时间哈,,能够easy的理解..
    大多时间哈,更是代码短....

    可是,有时候,代码很多其它,更长的...预计是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");
        }
  • 相关阅读:
    P3913 车的攻击
    P1866 编号
    P1100 高低位切换
    P1469 找筷子
    网络穿透/云端组网/视频拉转推服务EasyNTS上云网关管理平台使用过程中掉线如何排查?
    RTSP协议Web无插件直播平台EasyNVR调用登录接口报“密码加解密错误”如何解决?
    安防视频智能分析平台EasyNVR新版本直接使用老版本的数据库导致界面数据异常的分析
    RTSP协议视频智能分析平台EasyNVR更新版本后无法正常显示平台页面排查步骤
    如何将RTSP/GB28181协议视频监控平台EasyNVR/EasyGBS等录像文件通过ffmpeg转HLS进行播放?
    视频直播/智能分析平台EasyNVR调用登录接口返回‘密码加解密错误’如何修复?
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3741790.html
Copyright © 2011-2022 走看看