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

Java中模仿函数思维

2016-06-28 11:10 591 查看

函数思维

函数式编程的核心是函数,就像面向对象语言的主要抽象方法是类。函数为流程构建了功能模块,并具有传统命令式语言中所不具有的一些功能。Java中没有独立的函数,下面几段代码只是用来模仿一下函数的编程思维。

FuncTion.java

package com.cloud.day2;
public
interface
FuncTion {
   /*这里说明一下:3个点表示可以传一个或者多个参数*/
   public Object invoke(Object...o);
}

MyTest1.java

package com.cloud.day2;
import java.util.Arrays;
public
class
MyTest1 {
   public
static void
main(String[]
args) {
      Object[]
arr = new Object[]{1,2,3,4,5};
      map(arr,new
FuncTion() {
       
@Override
        public Object invoke(Object ...o) {
           return (Integer)o[0]*2;
        }
      });
      System.out.println(Arrays.toString(arr));
      /*输出:[2, 4, 6, 8, 10]*/
   }
   public
static void
map(Object[]
arr,FuncTion
function){
      for(int
i = 0;i<arr.length;i++){
       
arr[i] = function.invoke(arr[i]);
      }
   }
}
 

MyTest2.java

package com.cloud.day2;
public
class
MyTest2 {
   public
static void
main(String[]
args) {
//    Object sum = sum(new Object[]{1,2,3,4});
//    System.out.println(sum);/*Output:10*/
      Object
str = toStr(new Object[]{1,2,3,4});
      System.out.println(str);/*Output:1234*/
   }
   /**
    *
字符串转换函数
    *
@param objects
    *
@return
    */
   public
static
Object toStr(Object[]
objects){
      return
reduce(objects,
"", new FuncTion() {
       
@Override
        public Object invoke(Object...
o) {
           System.out.println("------------------");
           System.out.println(o[0]);
           System.out.println(o[1]);
           System.out.println("------------------");
           return
o[0].toString()+o[1];
        }
      });
   }
   /**
    *
求和函数
    *
@param arr
    *
@return
    */
   public
static
Object sum(Object[]
arr){
      return
reduce(arr, 0, new FuncTion() {
       
@Override
        public Object invoke(Object...
o) {
           return (Integer)o[0]+(Integer)o[1];
        }
      });
   }
   /**
    *
程序处理函数
    *
@param arr
    *
@param init
    *
@param f
    *
@return
    */
   public
static
Object reduce(Object[]
arr,Object init,FuncTion
f){
      Object
sum = init;
      for(int
i=0;i<arr.length;i++){
       
sum = f.invoke(sum,arr[i]);
        System.out.println("循环中的sum="+sum);
      }
      System.out.println("循环结果sum="+sum);
      return
sum;
   }
}

输出结果

------------------
 
1
------------------
循环中的sum=1
------------------
1
2
------------------
循环中的sum=12
------------------
12
3
------------------
循环中的sum=123
------------------
123
4
------------------
循环中的sum=1234
循环结果sum=1234
1234
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: