Java

Java 知识量:11 - 45 - 220

5.4 应用lambda表达式><

lambda表达式与嵌套类- 5.4.1 -

Lambda表达式是Java 8开始引入的一个特性,是一种简洁的表示匿名函数的方法,它没有名称,但有参数列表,函数体,返回值,和类型。

嵌套类是Java中的一种类,它被定义在另一个类的内部。嵌套类分为两种:静态和非静态。非静态嵌套类与外部类有相同的访问限制,而静态嵌套类则可以直接访问外部类的所有成员,包括私有成员。

Lambda表达式在Java中主要用于简化函数式编程的语法,并且可以与Java的内部类很好地配合使用。下面是一个使用Lambda表达式和嵌套类的简单示例:

public class NestedLambdaExample {  
    public static void main(String[] args) {  
        List<String> list = Arrays.asList("Apple", "Banana", "Cherry");  
  
        // 使用lambda表达式和内部类创建谓词  
        Predicate<String> isLong = new Predicate<String>() {  
            @Override  
            public boolean test(String s) {  
                return s.length() > 5;  
            }  
        };  
  
        // 使用lambda表达式和Stream API过滤列表  
        List<String> result = list.stream()  
            .filter(isLong)  
            .collect(Collectors.toList());  
  
        System.out.println(result); // 输出:[Apple]  
    }  
}

在这个例子中,首先创建了一个字符串列表。然后,定义了一个内部类Predicate<String>,该类实现了test方法,用于判断字符串的长度是否超过5。这是一种传统的实现方式,但使用lambda表达式,可以更简洁地表达这个谓词:

Predicate<String> isLong = s -> s.length() > 5;

最后,使用Stream API的filter方法过滤列表。在这个例子中,filter方法接受一个Predicate作为参数,对列表中的每个元素应用这个谓词,并返回一个新的流,其中只包含满足条件的元素。

lambda表达式与方法引用- 5.4.2 -

可以使用lambda表达式来表示一个简单的算数运算:

// 定义一个执行加法的函数式接口  
@FunctionalInterface  
interface Adder {  
    int add(int a, int b);  
}  
  
// 使用lambda表达式创建Adder实例  
Adder adder = (a, b) -> a + b;  
  
// 使用Adder实例进行加法运算  
int sum = adder.add(1, 2); // sum为3

方法引用是Java 8中引入的一种新特性,它是lambda表达式的简化版本。如果一个方法或构造函数只有一个参数,那么可以使用方法引用来简化lambda表达式的书写。方法引用的语法是:

::methodName

可以使用方法引用来简化上述Adder接口的实例化:

Adder adder = Integer::sum; // 使用方法引用创建Adder实例  
  
int sum = adder.add(1, 2); // sum为3

这里,Integer::sum是一个方法引用,它引用的是Integer类中的sum方法。因为sum方法接受两个参数,所以可以直接用于Adder接口的实现。

无论是lambda表达式还是方法引用,都使得Java代码更加简洁,可读性更高,同时更易于理解函数式编程的范式。