您的位置:首页 > 编程语言 > Java开发

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

2014-05-21 17:48 483 查看
#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");

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