Lambda表达式是一小段代码,它接受参数并返回一个值。下面的示例表达式具有一个参数。该表达式还可以包含两个或多个参数。
parameter -> expression
Lambda表达式也可以视为匿名函数。没有名称且不属于任何类的函数。Lambda表达式类似于方法,但是它们不需要名称,可以在方法主体中实现。
(parameter1, parameter2) -> expression
Lambda表达式的概念最早是在LISP编程语言中引入的。表达式是有限的。它们必须立即返回一个值,并且不能包含诸如if
或的变量,赋值或语句for
。为了执行更复杂的操作,可以将代码块与花括号一起使用。
(parameter_list) -> {
function_body}
如果lambda表达式需要返回一个值,则代码块应具有return语句。
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
对于这些下一个示例,我们将使用功能接口。
功能接口在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"));
}
}
输出量
Good Day
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
您可以使用lambda表达式来运行线程。在以下示例中,我们通过使用lambda表达式实现run方法。
public class ThreadExample{
public static void main(String[] args) {
//Thread Example without lambda
Runnable r1=new Runnable(){
public void run(){
System.out.println("Thread1 is running...");
}
};
Thread t1=new Thread(r1);
t1.start();
//Thread Example with lambda
Runnable r2=()->{
System.out.println("Thread2 is running...");
};
Thread t2=new Thread(r2);
t2.start();
}
}
输出量
Thread1 is running...
Thread2 is running...
Lambda表达式也可以用作比较器,也可以用于过滤列表。
class Product{
int id;
String name;
float price;
public Product(int id, String name, float price) {
super();
this.id = id;
this.name = name;
this.price = price;
}
}
public class FilterListExample{
public static void main(String[] args) {
List<Product> list=new ArrayList<Product>();
list.add(new Product(1,"Volvo",19000f));
list.add(new Product(3,"Tesla",75000f));
list.add(new Product(2,"Toyota",38000f));
// using lambda to filter data
Stream<Product> filtered_data = list.stream().filter(p ->
p.price > 3000);
// using lambda to iterate through collection
filtered_data.forEach(
product -> System.out.println(product.name+":
"+product.price)
);
}
}
输出量
Tesla: 75000.0
Toyota: 38000.0
这是使用Lambda表达式的一些好处。
1.更少的代码行:
使用lambda表达式的好处之一是减少了代码量。
2.通过在方法中传递行为来支持顺序和并行执行:
随着Java 8中Stream API的引入,可以将函数传递给收集方法,现在由收集负责以顺序或并行方式处理元素。
3.更高的效率(利用多核CPU):
如果对集合进行批量操作,则使用Stream API和lambda表达式可以实现更高的效率(并行执行)。同样,lambda表达式可以帮助实现集合的内部迭代,而不是如上例所示的外部迭代。如今,我们拥有带多核的CPU,因此可以通过使用lambda并行处理集合来利用这些多核CPU。
总之,欢迎使用Lambda表达式添加到任何代码库中,本文旨在展示如何使用和应用它们的指针。
关注公众号啦啦啦好想biu点什么
免费获取更多资讯和开源游戏代码。长按二维码获取
后面我还会持续更新类似免费好玩的H5小游戏、Java小游戏、好玩、实用的项目和软件等等
最后,不要忘了❤或