函数式编程java版

一开始。我觉得java也可以函数式编程啊,如下代码。

public class TestMapLike {

     public static void main(String[] args) {
            Object[] arr = new Object[]{1, 2, 3, 4, 5};
            map(donothing(arr));
            System.out.println(Arrays.toString(arr));
            }
     public static void map(Object[] arr) {
            for (int i = 0; i < arr.length; i++) {
                arr[i] = (Integer)arr[i]*2;
            }
        }

     public static Object[] donothing(Object[] arr) {
           return arr;
        }


}

看map函数,里面也有函数。

但是…

先看java版函数式编程实现map

定义接口,就是函数

public interface Func {
    public Object invoke(Object ...o);
}

python里map的实现


import java.util.Arrays;


public class TestMap {

     public static void main(String[] args) {
            Object[] arr = new Object[]{1, 2, 3, 4, 5};
            map(arr, new Func() {
                @Override
                public Object invoke(Object ...o) {
                    return (Integer)o[0] * 2;
                }
            });
            System.out.println(Arrays.toString(arr));//output [2, 4, 6, 8, 10]
        }

        public static void map(Object[] arr, Func function) {
            for (int i = 0; i < arr.length; i++) {
                arr[i] = function.invoke(arr[i]);
            }
        }
}

对应到python

map(lambda x:x*2,[1,2,3,4,5])

reduce的java实现


public class TestReduce {
     public static void main(String[] args) {
            Object sum = sum(new Object[]{0, 1, 2, 3, 4});
            Object str = join(new Object[]{0, 1, 2, 3, 4});
            System.out.println(sum);//output 10
            System.out.println(str);//output 01234
        }

        private static Object join(Object[] objects) {
            return reduce(objects, "", new Func() {
                @Override
                public Object invoke(Object... o) {
                    return o[0].toString() + o[1];
                }
            });
        }

        public static Object sum(Object[] arr) {
            return reduce(arr, 0, new Func() {
                @Override
                public Object invoke(Object ...o) {
                    return (Integer)o[0] + (Integer)o[1];
                }
            });
        }

        private static Object reduce(Object[] arr, Object init, Func f) {
            Object sum = init;
            for (int i = 0; i < arr.length; i++) {
                sum = f.invoke(sum, arr[i]);
            }
            return sum;
        }
    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值