• Java—Lambda基础


    虽然JVM有着Scala 、Groovy 、Clojure 等依赖于JVM的函数语式语言,但直到Java8才算是java正式支持函数式编程
      Java8中加入了Lambda的支持标志着Java正式加入了混合式编程语言(支持命令式编程与函数式编程)的行列;像C#、Python都是同时支持两种编程范式,近年来函数式编程愈演愈烈,大有命令式编程向函数式编程靠拢的趋势;
      命令式编程与函数式编程的最基本区别在于使用的计算模型的不同,命令式编程是基于图灵机的,而函数式编程使用的是lambda演算; 有了lambda的支持使用Java8可以写出可读性更高的代码,减少代码的繁杂度、传递行为等;

    比较

      像之前我们实现一个接口的时候可以使用匿名内部类的方式,先看下匿名内部类实现:

    Runnable primitive=new Runnable() {
       @Override
       public void run() {
           System.out.println("inner class");
          } 
      }; 
    

    lambda的实现: Runnable lambda = ()-> System.out.println(" lambda ");
      比较两种实现方式lambda的简洁程度是匿名内部类没法比的,lambda实现可以理解为传递行为给Runnable,而匿名内部类则是现实了Runnable接口;
    是不是lambda可以代替匿名内部类出现在所有地方呢? 答案不是的。 Lambda只能代替内部类出现在的接口为函数接口(FunctionalInterface)的地方。

    语法

      lambda语法:  () -> {}
    
     1、 ()里面为函数接口的参数,{} 与要传递到函数接口的语句;
     2、 lambda方式如果有多条语句还可以用{ 括号括起来;
     3、 如只有一条语句则可以省略{},函数接口存在返回值当->后面只有单条语句时return可以省略,如有多条语句则需要显示return返回该值;
    

    函数接口(Functionalnterface):只定义一个抽象方法的接口默认为函数接口,接口中可以有default方法和static方法,也可以使用@FuncationalInterface注解该接口;

    简单应用

    //实现x+y相加
        BinaryOperator<Integer> addOperator = (x, y) -> x+y;
        System.out.println(addOperator.apply(3,4));
    

      Java8中除了在Runnable、Comparator等以往存在的接口添加了FuncationalInterface注解外还在java.util.function包中新加入了大批FuncatinalInterface接口;使用java.util.function包下面的接口可以大大简化我们的编程;

    参考资料:

     《Java8函数式编程》  
    

      文章首发地址:Solinx
      http://www.solinx.co/archives/382

  • 相关阅读:
    Java Servlet API中文说明文档
    JavaWeb学习总结(一)——JavaWeb开发入门
    Android ListView滑动底部自动加载更多
    Android TextView 手动上下滑动
    Android抽象布局——include、merge 、ViewStub
    Android 信鸽推送通知栏不显示推送的通知
    Twitter License for Android
    Uber License for Android
    Android Studio之build.gradle小技巧
    Android动画之硬件加速
  • 原文地址:https://www.cnblogs.com/softlin/p/4705996.html
Copyright © 2020-2023  润新知