Java8 函数式编程

之前因为spark学习了scala,作为同样运行在jvm上的语言,在学习scala的期间,我深深的被震撼到了,因为之前没有学习过函数式编程(其实第一个学习的就是python,但是根本没有用到过它的函数式编程).但是当我看到java8的新特性时,我发现java也可以进行函数式编程.

函数式编程的目的意义没有副作用等等这里先不说,就先说说如何将函数作为参数和返回值

利用java进行函数式编程主要就是利用函数式接口,但是函数式接口在java8之前就有一些了,就例如多线程的runnable,但是8以前是没有lambda表达式的,所以只能使用匿名内部类,在用过lambda表达式的人看来,那是相当臃肿的,8更新了lambda表达式,这就使函数式编程更上一层楼.

这里介绍一个函数式接口(函数接口有很多,而且可以自定义),函数式接口是什么呢?一言以蔽之,函数式接口就是只有一个抽象方法的接口(只有一个抽象方法,不代表只有一个方法,在java8中,接口还可以有默认方法,可以了解一下).这里我利用它来说明java函数式编程,这个函数式接口就是IntConsumer,它接受一个int值,没有返回,我们这样使用,看代码:

void s(int ss,IntConsumer sss){
    sss.accept(ss);
}
public static void main(String[] args){
    test t = new test();
    t.s(1,x->System.out.println(x));
}

结果就是返回1

这个例子很好理解,方法s接收了sss,在java中我们认为那是接收了一个接口作为参数,但是在函数是编程中,我们要认为它是接收了一个函数作为参数,这个函数的函数名是sss,函数字面量就是x->System.out.println(x);这个函数字面量就是lambda表达式,如果用匿名内部类就是

new IntConsumer{
    void sss(int x){
       System.out.println(x);
    }
}

这样对比就很明显了.

然后是将函数作为返回,其实照着前面的代码就可以了写出了,

IntConsumer g(IntConsumer s){
        return s ;
    }

    public static void main(String[] args) {
        test t = new test() ;
        t.g(x-> System.out.println(x)).accept(1);
    }

还是同样的道理,返回1;

就先写到这里

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值