zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    升级 asp.net core 1.1 到 2.0 preview
    【asp.net core】Publish to a Linux-Ubuntu 14.04 Server Production Environment
    CEF 各个版本适应的平台参考表
    VC2012编译CEF3-转
    【WebKit内核 CEF3 】 第一篇:下载分支代码并本地编译
    INNODB自增主键的一些问题 vs mysql获得自增字段下一个值
    Mysql的批量导入类 MySqlBulkLoader
    一个产生随机数字 字符串验证码 日期的类扩展实现
    asp web api json 序列化后 把私有字段信息也返回了解决办法
    使用Elasticsearch 与 NEST 库 构建 .NET 企业级搜索
  • 原文地址:https://www.cnblogs.com/softlin/p/4705996.html
Copyright © 2011-2022 走看看