Java教程 专题
专题目录
您的位置:java > Java教程专题 > Java Lambda语法
Java Lambda语法
作者:--    发布时间:2019-11-20

java lambda语法


使用lambda表达式的一般语法是

(parameters) -> { body }

-> 分隔参数和lambda表达式主体。

参数括在括号中,与方法相同,而lambda表达式主体是用大括号括起来的代码块。

注意

lambda表达式主体可以有局部变量,语句。我们可以在lambda表达式主体中使用break,continue和return。我们甚至可以从lambda表达式主体中抛出异常。

lambda表达式没有名称,因为它表示匿名内部类。

lambda表达式的返回类型由编译器推断。

lambda表达式不能像方法一样有throws子句。

lambda表达式不能是泛型,而泛型在函数接口中定义。


显式和隐式lambda表达式

未声明其参数类型的lambda表达式称为隐式lambda表达式。

显式lambda表达式是一个lambda表达式,它声明其参数的类型。

编译器将推断用于隐式lambda表达式的参数类型

例子

以下代码使用单一方法创建接口,并将其用作lambda表达式类型。当创建lambda表达式时,我们声明参数 s1 的类型integer类型。

public class main {

  public static void main(string[] args) {
    myintegercalculator myintegercalculator = (integer s1) -> s1 * 2;

    system.out.println("1- result x2 : " + myintegercalculator.calcit(5));

  }
}
interface myintegercalculator {

  public integer calcit(integer s1);

}

上面的代码生成以下结果。


例2

这里是没有使用类型的演示。当忽略类型时,编译器必须计算出来。

public class main {

  public static void main(string[] args) {
    myintegercalculator myintegercalculator = (s1) -> s1 * 2;

    system.out.println("1- result x2 : " + myintegercalculator.calcit(5));

  }
}
interface myintegercalculator {

  public integer calcit(integer s1);

}

上面的代码生成以下结果。

省略参数类型

我们可以选择省略lambda表达式中的参数类型。

在lambda表达式 (int x, int y) -> { return x + y; }声明的参数类型。

我们可以安全地重写lambda表达式,省略参数类型

(x, y) -> { return x + y; }

如果我们选择省略参数类型,我们必须省略所有参数的类型。

public class main {
  public static void main(string[] argv) {
    processor stringprocessor = (str) -> str.length();
    string name = "java lambda";
    int length = stringprocessor.getstringlength(name);
    system.out.println(length);

  }
}

@functionalinterface
interface processor {
  int getstringlength(string str);
}

上面的代码生成以下结果。

单参数

对于单个参数lambda表达式,我们可以省略括号,因为我们省略了参数类型。

lambda表达式 (string msg) -> {system.out.println(msg);}
有一切。

然后我们可以省略参数类型

(msg)->{system.out.println(msg);}

我们可以进一步省略参数类型和括号,如下所示。

msg -> { system.out.println(msg); }
public class main {
  public static void main(string[] argv) {
    processor stringprocessor = str -> str.length();
    string name = "java lambda";
    int length = stringprocessor.getstringlength(name);
    system.out.println(length);

  }
}

@functionalinterface
interface processor {
  int getstringlength(string str);
}

上面的代码生成以下结果。

无参数

对于没有参数的lambda表达式,我们仍然需要括号。

() -> { system.out.println("hi"); }

以下示例显示如何使用 booleansupplier

import java.util.function.booleansupplier;

public class main {
  public static void main(string[] args) {
    booleansupplier bs = () -> true;
    system.out.println(bs.getasboolean());

    int x = 0, y= 1;
    bs = () -> x > y;
    system.out.println(bs.getasboolean());
  }
}

上面的代码生成以下结果。

final修饰符

您可以在参数声明中为表达式lambda表达式使用 final 修饰符。

以下lambda表达式使用final修饰符。

(final int x, final int y) -> { return x + y; }

我们可以只使用一个修饰符如下。

(int x, final int y) -> {return x + y;}
public class main {
  public static void main(string[] argv) {
    processor stringprocessor = (final string str) -> str.length();
    string name = "java lambda";
    int length = stringprocessor.getstringlength(name);
    system.out.println(length);

  }
}

@functionalinterface
interface processor {
  int getstringlength(string str);
}

上面的代码生成以下结果。

lambda表达式主体

lambda表达式主体可以是块语句或单个表达式。

块语句用大括号括起来,而单个表达式可以没有大括号。

在块语句中,我们可以使用 return 语句返回值。

以下lambda表达式使用块语句并使用 return 语句返回总和。

(int x, int y) -> { return x + y; }

下面的lambda使用了一个表达式:

(int x, int y) -> x + y

表达式不需要大括号。

lambda不必返回值。以下两个lambda表达式只是将参数输出到标准输出,不返回任何内容。

(string msg)->{system.out.println(msg);}// a  block   statement
(string msg)->system.out.println(msg)   //an expression

例:

public class main {
  public static void main(string[] argv) {
    processor stringprocessor = (string str) -> str.length();
    string name = "java lambda";
    int length = stringprocessor.getstringlength(name);
    system.out.println(length);// www . j a  va 2  s. co m

  }
}

@functionalinterface
interface processor {
  int getstringlength(string str);
}

上面的代码生成以下结果。

网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册