Java 8 中的 Lambda 表达式,允许将函数作为形参传递给另外的函数。为了更好地理解,我们用实例的方式来演示如何使用 Lambda 表达式。
1、Lambda 表达式 Hello World
这是一个最简单的 Lambda 表达式的例子。首先在 main 方法的上面声明了一个接口 HelloWorld,在 main 方法中实现了这个接口,随后调用了接口的唯一方法。
public class LambdaHelloWorld {
interface HelloWorld {
String hello(String name);
}
public static void main(String[] args) {
HelloWorld helloWorld = (String name) -> { return "Hello " + name; };
System.out.println(helloWorld.hello("Joe"));
}
}
2、在 Lambda 表达式中访问局部变量和成员变量
在这个例子中演示了如何在 Lambda 表达式中访问局部变量和成员变量,请注意 Runnable 接口的用法。
public class LambdaVariableAccess {
public String wildAnimal = "Lion";
public static void main(String[] arg) {
new LambdaVariableAccess().lambdaExpression();
}
public void lambdaExpression(){
String domesticAnimal = "Dog";
new Thread (() -> {
System.out.println("Class Level: " + this.wildAnimal);
System.out.println("Method Level: " + domesticAnimal);
}).start();
}
}
3、Lambda 表达式中的方法传递
这个例子比前面的更高级一些。对与 Circle 接口,有两个不同的实现。这些实现本身作为参数传递到了另外一个方法中。
public class LambdaFunctionArgument {
interface Circle {
double get(double radius);
}
public double circleOperation(double radius, Circle c) {
return c.get(radius);
}
public static void main(String args[]){
LambdaFunctionArgument reference = new LambdaFunctionArgument();
Circle circleArea = (r) -> Math.PI * r * r;
Circle circleCircumference = (r) -> 2 * Math.PI * r;
double area = reference.circleOperation(10, circleArea);
double circumference = reference.circleOperation(10, circleCircumference);
System.out.println("Area: "+area+" . Circumference: "+circumference);
}
}
4、Lambda 表达式的初始化
import java.util.concurrent.Callable;
public class LambdaInitialization {
public static void main(String args[]) throws Exception{
Callable[] animals = new Callable[]{()->"Lion", ()->"Crocodile"};
System.out.println(animals[0].call());
}
}
5、Lambda 表达式进行排序
这个例子的关键是将方法的引用传递给了另一个方法来进行调用。Comparator 接口的具体实现作为参数传递给了 Arrays.sort 方法。
import java.util.Arrays;
public class LambdaExpressionSort {
public static void main (String[] ar){
Animal[] animalArr = {
new Animal("Lion"),
new Animal("Crocodile"),
new Animal("Tiger"),
new Animal("Elephant")};
System.out.println("Before Sort: "+Arrays.toString(animalArr));
Arrays.sort(animalArr, Animal::animalCompare);
System.out.println("After Sort: "+Arrays.toString(animalArr));
}
}
class Animal {
String name;
Animal(String name) {
this.name = name;
}
public static int animalCompare(Animal a1, Animal a2) {
return a1.name.compareTo(a2.name);
}
public String toString() {
return name;
}
}
6、条件判断(Predicates) 和 Lambda 表达式
条件判断和 Lambda 之间结合的非常好。我们可以使用 Lambda 来实现 Predicate 接口,并且将其传递给具体的方法,作为方法的判断条件。
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
public class LambdaPredicate {
public static int add(List numList, Predicate predicate) {
int sum = 0;
for (int number : numList) {
if (predicate.test(number)) {
sum += number;
}
}
return sum;
}
public static void main(String args[]){
List numList = new ArrayList();
numList.add(new Integer(10));
numList.add(new Integer(20));
numList.add(new Integer(30));
numList.add(new Integer(40));
numList.add(new Integer(50));
System.out.println("Add Everything: "+add(numList, n -> true));
System.out.println("Add Nothing: "+add(numList, n -> false));
System.out.println("Add Less Than 25: "+add(numList, n -> n < 25));
System.out.println("Add 3 Multiples: "+add(numList, n -> n % 3 == 0));
}
}
文章来源:
http://www.aptusource.org/2014/03/java-8-lambda-example/
分享到:
相关推荐
1. **类型推断**:Java 8 可以自动推断Lambda表达式的参数类型,因此在许多情况下,我们无需显式声明类型。 2. **捕获外部变量**:Lambda 表达式可以访问和修改其定义范围内的 final 或基本类型的局部变量。 3. **...
Java 8 引入了Lambda表达式,这是对传统编程方式的一大革新,它极大地简化了函数式编程,尤其是在处理集合和并发操作时。Lambda表达式是Java 8中的一种语法糖,它允许开发者以更简洁的方式定义无状态、无副作用的...
Java 8引入了Lambda表达式,这是一种简洁的编写代码的方式,可以将代码块作为参数传递给方法,或者作为赋值给变量的对象。Lambda表达式为Java增加了函数式编程的能力,使代码更加简洁和灵活。在Java 8中,Lambda...
Java Lambda表达式是Java 8引入的一个重要特性,它极大地简化了函数式编程风格的实现。Lambda表达式允许我们将函数作为一个值传递,就像传递其他数据类型一样。这在处理集合、事件驱动编程以及多线程等场景下尤其...
函数式接口可以被 Lambda 表达式实例化,允许开发者使用 Lambda 表达式编写更简洁的代码。 1.2 函数式接口- Consumer/Predicate/Function/Supplier 函数式接口有四种类型:Consumer、Predicate、Function 和 ...
Lambda表达式是Java 8对函数式接口支持的核心组成部分,它允许我们将代码块视为一种值,可以作为参数传递,也可以作为方法返回。 首先,我们需要理解什么是函数式接口。函数式接口是指只有一个抽象方法的接口,这样...
Lambda表达式是Java 8引入的关键特性之一,它极大地简化了函数式编程,使得Java开发者能够更有效地处理并发问题,从而更好地利用现代计算机的多核处理器资源。 Lambda表达式的核心概念在于它的简洁性和可传递性。它...
例如,上面的`MyDelegate`可以用Lambda表达式来创建实例: ```csharp MyDelegate lambdaDel = (x, y) => x + y; // Lambda表达式作为委托实例 ``` Lambda表达式与委托结合使用,使得代码更加简洁,尤其在LINQ查询...
Java8 新特性Lambda表达式实例详解 Java8 中引入了Lambda表达式,这是一种函数式编程的方式,它可以使代码变得更加简洁和高效。Lambda表达式可以作为函数式接口的实例,它可以捕获外部变量,实现高效的回调机制。 ...
Lambda 表达式实例: ```java // 无参数,直接返回5 ()->5 // 接收一个参数,并返回其两倍值 x->2*x // 接收两个参数,并返回它们的差值 (x,y)->x-y // 接收两个整数参数,返回它们的和 (int x, int y)->x+y // ...
Lambda表达式是Java 8引入的一种新的编程特性,它极大地简化了函数式编程,并使得代码更加简洁、易读。在Java中,Lambda表达式可以被理解为匿名函数,即没有名字的函数,它可以被当作方法参数传递,或者作为类的成员...
Lambda表达式使得Java 8能够更好地支持函数式编程,让代码更简洁、可读性更强,尤其在处理集合、并发以及事件驱动编程时显得尤为重要。通过结合函数接口,Lambda表达式可以方便地应用于方法引用、流API等高级特性中...
在这个"Java8集合 CompletableFuture lambda表达式 新的TimeAPI 和ForkJoin Demo包"中,我们可以深入探讨以下几个关键知识点: 1. **Lambda表达式**: Lambda表达式是Java 8的一大亮点,它简化了对匿名函数的处理...
Lambda表达式是Java 8引入的一种新特性,它极大地简化了函数式编程,使得代码更加简洁、易读。Lambda表达式本质上是匿名函数,可以理解为没有名字的函数,但功能与普通方法相同,能够被赋值给变量,也可以作为参数...
"Java 8 lambda表达式引入详解及实例" Java 8 中引入的 lambda 表达式是一种新的编程方式,能够简化代码、提高开发效率。下面将对 lambda 表达式的引入、基本概念、使用方法和实例进行详细的介绍。 lambda 表达式...
Lambda 表达式是 Java 8 引入的一项重要特性,它允许我们以简洁的方式定义匿名函数。...熟练掌握Lambda表达式对于提升Java编程能力至关重要。通过实践和理解其工作原理,开发者可以更好地利用这一强大的工具。
Java Lambda表达式是Java 8引入的一个重要特性,它极大地简化了函数式编程,并使得代码更加简洁、易读。在传统的面向对象编程中,我们通常通过创建对象并调用其方法来解决问题。而函数式编程则更注重结果,不关心...
Java 8是Java语言的一个重大版本更新,它引入了lambda表达式,这是Java平台的核心特性之一。Lambda表达式为Java带来了函数式编程的元素,使得开发者可以以更简洁的方式编写代码,尤其是在集合和多线程方面。本资料...
Java的lambda表达式实现解析是Java 8中引入的一项新功能,为开发者提供了更加简洁和灵活的编程方式。lambda表达式可以理解为匿名函数,可以实现在代码中编写小段的函数式代码,从而提高代码的可读性和可维护性。 在...