java lambda表达式,java中lambda用法

  java lambda表达式,java中lambda用法

  这篇文章给你带来了一些关于java的知识,主要是关于Lambda表达式。Lambda表达式在Java语言中引入了一个运算符* * "-"* *,称为Lambda运算符或arrow运算符。下面就来看看吧,希望对你有帮助。

  如何解决写爬虫IP受阻的问题?立即使用。

  

一、Lambda初识

  我们知道在Java中,接口是不能实例化的,但是接口对象可以指向它的实现类对象。接口连实现对象都没有怎么办?您也可以使用匿名类,如下所示:

  公共类JavaTest {

  公共静态void main(String[] args) {

  Fly fly=new Fly() {

  @覆盖

  公共void fly(字符串名称){

  System.out.println(名为 flight );

  }

  };

  Fly.fly(张三);

  } }界面浮动{

  抽象void fly(字符串名);}但是使用匿名内部方法,代码量其实不是很简洁。为了使代码更加简洁,Java引入了Lambda表达式的编写方法,并通过更简单的语法,来实现这一功能。使用Lambda表达式简化的代码如下:

  公共类JavaTest {

  公共静态void main(String[] args) {

  fly fly=name-system . out . println(name flight );

  Fly.fly(张三);

  } }界面浮动{

  抽象void fly(字符串名);}通过Lambda表达式达到同样的效果,但是代码量非常简化。这就是Lambda表达式的魅力。

  

二、 函数式接口

  在学习Lambda表达式的语法之前,首先要知道函数式接口是什么。只有一个待实现方法的接口叫功能接口。

  //接口中只有一个要实现的方法fly,所以这是函数接口interface Fly{

  void fly(字符串名);}//接口中要实现两个方法。这是一个功能接口界面运行{

  void fast run();

  void slow run();}//接口中有两个方法,但其中一个是定义的默认方法。只有一个方法真正需要子类来实现。这是功能界面的界面跳转{

  void jump();

  默认void highJump(){

  system . out . println( Jump high );

  }}可以给接口添加**@FunctionalInterface注释,断言这个接口是一个函数接口。如果此接口不是功能接口,编译将提示错误。

  为什么想知道什么是功能接口?因为Lambda expression简化了接口的匿名类实现,所以它只能在函数接口* *上工作。

  这很好理解,如果一个接口有多个方法要实现,Lambda expression无法分辨它现在实现的是接口中的哪个方法。

  

三、Lambda表达式语法

   Lambda表达式引入了一个运算符* * "-"* *,在Java语言中称为Lambda运算符或arrow运算符。它将Lambda分成两部分:

  左侧:指定了Lambda表达式所需的所有参数。

  右边:Lambda体,也就是Lambda表达式要执行的函数,公式化。

  像这样:

  (参数)-表达式

  或者

  (参数)-{语句;} Lambda表达式除了-和Lambda体之外,其他参数如参数、圆括号、中括号可以用更多的参数类型和方法体的代码行省略。

  以下面这个功能接口的实现为例:

  接口数学运算{

  int运算(int a,int b);

  }

  界面问候服务{

  void sayMessage(字符串消息);

  }

  private int operation(int a,int b,MathOperation mathOperation){

  返回mathOperation.operation(a,b);

  }

  接口NoParam{

  int return one();

  }以下是lambda表达式的重要特性:

  可选类型声明:Lambda表达式不需要声明实现方法的参数类型,编译器可以统一识别参数值。//类型声明

  MathOperation加法=(int a,int b)-a b;

  //没有类型声明

  MathOperation减法=(a,b)-a-b;可选的参数圆括号:一个参数不需要定义括号,但是没有参数或者多个参数需要定义括号。//不带括号

  greeting service greet service 1=message-

  System.out.println(Hello 消息);

  //使用括号

  greeting service greet service 2=(message)-

  System.out.println(Hello 消息);可选的大括号:如果主体包含语句,则不需要使用花括号。//多条语句中不能省略花括号。

  MathOperation乘法=(int a,int b) - {

  int num=a 1;

  num=a b;

  返回a * b编号;

  };

  //大括号可以在单个语句中省略

  MathOperation pision=(int a,int b)-a/b;可选的返回关键字:如果主体只有一个表达式返回值,编译器会自动返回值,大括号需要指定表达式返回数值。//有多个语句的Lambda表达式,如果有返回值,需要使用return。

  MathOperation乘法=(int a,int b) - {

  int num=a 1;

  num=a b;

  返回a * b编号;

  };

  //单个语句可以省略return

  MathOperation pision=(int a,int b)-a/b;

四、Lambda表达式的使用范围

   Lambda表达式不仅用于简化匿名类的创建,还有很多用途。

  

1、为变量赋值

  上一篇文章中,Lambda表达式都是为了给变量赋值而写的,可以简化匿名内部类赋值的代码段,提高读取效率。

  MathOperation减法=(a,b)-a-b;

2、作为return结果

  接口MathOperation {

  int运算(int a,int b);

  }

  MathOperation getOperation(int a,int b){

  return (a1,B1)-a b;

  }

3、作为数组元素

   MathOperation数学[]={

  (a,b) - a b,

  (a,b) - a-b,

  (a,b)-a * b };

4、作为普通方法或者构造方法的参数

  公共静态void main(String args[]){

  Java 8 tester Java 8 tester=new Java 8 tester();

  java8Tester.operate(1,2,((a,b)-a * b));

  }

  private int operation(int a,int b,MathOperation mathOperation){

  返回mathOperation.operation(a,b);

  }

  接口数学运算{

  int运算(int a,int b);

  }:

五、Lambda表达式的作用域范围

  在lambda表达式体内,可以访问表达式体外的变量,但不能修改其他变量。

  

六、Lambda表达式的引用写法

  学习Lambda时,你可能还会发现一种奇怪的写法,比如下面这段代码:

  //方法引用写成greeting service greeting service=system . out:println;

  greeting service . say message( hello world );有一个符号:以前没见过。这种编写方法称为方法引用。

  显然,使用方法引用比普通的Lambda表达式要简洁一点。

  如果函数式接口的实现恰好可以通过调用一个方法来实现,那么我们可以使用方法引用。

  公共类Java8Tester {

  公共静态void main(String args[]){

  //静态方法引用-由类名调用

  greeting service greeting service=Test:myname static;

  greeting service . say message( hello );

  Test t=new Test();

  //实例方法引用-由实例调用

  greeting service greeting service 2=t:my name;

  //构造方法方法引用-无参数

  supplier Test supplier=Test:new;

  system . out . println(supplier . get());

  }

  界面问候服务{

  void sayMessage(字符串消息);

  } }类测试{

  //静态方法

  public static void MyNameStatic(字符串名称){

  System.out.println(名称);

  }

  //实例方法

  public void myName(字符串名称){

  System.out.println(名称);

  }

  //无参数构造方法

  公共测试(){

  } }

7、Lambda表达式的优缺点

  

优点:

  更少的代码行-lambda表达式最大的好处之一就是减少了代码量。我们知道,lambda表达式只能用于函数接口。例如,Runnable是一个接口,所以我们可以很容易地应用lambda表达式。

  通过将行为作为方法中的参数传递来支持顺序和并行执行-使用Java 8中的Stream API将函数传递给collection方法。现在,集合的职责是以顺序或并行的方式处理元素。

  更高的效率-通过使用Stream API和lambda表达式,在集合批量操作的情况下,可以获得更高的效率(并行执行)。此外,lambda表达式有助于实现集合的内部迭代,而不是外部迭代。

  

缺点

  运行效率-如果不使用并行计算,计算速度往往并不比传统的for循环快。(并行计算有时候需要预热才能显示出效率优势。)很难调试-Lambda表达式很难破点,对mode也不友好。不容易看懂-如果其他程序员没有学过Lambda表达式,那么代码对于其他语言的程序员来说并不容易理解(我之所以学Lambda表达式,是因为我看不懂同事写的Lambda表达式的代码)。建议学习:《java视频教程》以上是Java实例讲解的lambda表达式的详细内容。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: