Lambda表达式是一小段代码,它接受参数并返回一个值。下面的示例表达式具有一个参数。该表达式还可以包含两个或多个参数。
parameter -> expression
Lambda表达式也可以视为匿名函数。没有名称且不属于任何类的函数。Lambda表达式类似于方法,但是它们不需要名称,可以在方法主体中实现。
(parameter1, parameter2) -> expression
Lambda表达式的概念最早是在LISP编程语言中引入的。表达式是有限的。它们必须立即返回一个值,并且不能包含诸如if或的变量,赋值或语句for。为了执行更复杂的操作,可以将代码块与花括号一起使用。
(parameter_list) -> {function_body}
如果lambda表达式需要返回一个值,则代码块应具有return语句。
Lambda表达的组成部分
Lambda表达式通常包含以下三个组成部分:
Argument-list:此参数通常是一个列表。它也可以是空的或非空的。
箭头标记:用于链接参数列表和表达式主体。
正文:它包含用于lambda表达式的表达式和语句。主体可以是简单的语句,也可以包含代码块。
一些示例实现和输出
对于第一个示例,我们将从数字列表开始。我们将对该列表的内容进行一些数学计算。
// A Java program to demonstrate simple lambda expressions import java.util.ArrayList; public class Main { public static void main(String[] args) { // Creating an ArrayList with elements // And add elements{7,4,2} to the list ArrayList<Integer> numbers = new ArrayList<Integer>(); numbers.add(7); numbers.add(4); numbers.add(2); //Using Lambda to print out all elements numbers.forEach( n -> System.out.println(n)); //Using Lambda to print out the double value of each element numbers.forEach( n -> System.out.println(n+n)); //Using Lambda to print all even elements numbers.forEach( n -> {if (n%2 == 0) System.out.println(n);}); } }
在上面的Java类中,我们有三个不同的Lambda表达式。
第一个表达式遍历列表,并在新行上打印出每个值。
第二个打印出每个元素加上自身的值。
第三个仅打印偶数。
输出1
7
4
2
输出2
14
8
4
输出3
4
2
功能接口中的Lambda表达式
对于这些下一个示例,我们将使用功能接口。
功能接口在Java是只包含一个抽象的(未实现)方法的接口。功能接口还可以包含具有实现的默认方法和静态方法。
无参数的功能接口
interface MyFunctionalInterface { //A method with no parameter public String sayHello(); } public class ExampleOne { public static void main(String args[]) { // lambda expression MyFunctionalInterface message = () -> { return "Hello"; }; System.out.println(message.sayHello()); } }
输出量
Hello
具有一个参数的功能接口
interface MyFunctionalInterface { //A method with one parameter public String sayHelloName(String str); } public class ExampleTwo { public static void main(String args[]) { // lambda expression MyFunctionalInterface message = (str) -> { return "Hello " + str; }; System.out.println(message.sayHelloName("Joy")); } }
输出量
Hello Joy
具有多个参数的功能接口
interface MyFunctionalInterface { //A method with one parameter public String concatStrings(String str1, String str2); } public class ExampleThree { public static void main(String args[]) { // lambda expression MyFunctionalInterface message = (str1, str2) -> { return str1 + str2; }; System.out.println(message.concatStrings("Good ","Day")); } }
哈希映射中的Lambda表达式
Lambda表达式也可以在哈希映射中使用,以对Map的元素进行迭代或进行计算更改。让我们在下面看这个例子。
public class HashMapExample{ public static void main(String[] args) { // Creating a HashMap and putting in elements Map<String, Integer> prices = new HashMap<>(); prices.put("Apple", 50); prices.put("Orange", 20); prices.put("Banana", 10); prices.put("Grapes", 40); //Using Lambda to print out all elements, k=key,v=value prices.forEach((k,v)->System.out.println("Fruit: " + k + ", Price: " + v)); } }
输出量
Fruit: Apple, Price: 50 Fruit: Orange, Price: 20 Fruit: Banana, Price: 10 Fruit: Grapes, Price: 40