📜  泛型方法 lambda java (1)

📅  最后修改于: 2023-12-03 15:40:44.226000             🧑  作者: Mango

泛型方法 Lambda Java

Java语言是一种面向对象的语言。在Java中,我们可以使用泛型来实现代码的重用和类型安全。泛型方法是一种特殊的方法,可以应用于任何数据类型并在编译时检查类型。

Lambda是Java 8中引入的一项新功能。Lambda表达式是一种轻量级的函数式编程方法。它允许将函数作为参数传递给方法,或者从方法中返回一个函数。

泛型方法

泛型方法是一种可以在方法调用时确定类型的方法。在方法名称前使用尖括号(<>)声明类型参数。类型参数可以是任何标识符,但通常使用单个字母来表示类型。

以下是一个泛型方法的示例:

public static <T> T getFirst(T[] array) {
    if (array == null || array.length == 0) {
        return null;
    }
    return array[0];
}

在这个方法中,类型参数T可以是任何类型。方法参数是一个名为array的数组,该数组包含与类型参数T相同的类型。方法返回数组的第一个元素。这个方法可以用于任何类型的数组。

Lambda表达式

Lambda表达式是一种匿名函数,可以作为参数传递给方法或从方法中返回。Lambda表达式可以替换一些匿名类(anonymous class)的使用。它的语法很简洁。

以下是一个使用Lambda表达式的示例:

List<String> list = Arrays.asList("one", "two", "three");

list.forEach(s -> System.out.println(s));

在这个例子中,list.forEach是一个接受Consumer类型的方法,接收一个Lambda表达式作为参数。Lambda表达式s -> System.out.println(s)是一个接受字符串s作为参数并打印该字符串的函数。因此,此代码段将打印列表中的每个元素。

使用泛型方法和Lambda表达式

泛型方法和Lambda表达式可以结合使用。例如,我们可以编写一个泛型方法来过滤列表中的元素,然后使用Lambda表达式指定过滤条件。

public static <T> List<T> filter(List<T> list, Predicate<T> predicate) {
    List<T> result = new ArrayList<>();
    for (T t : list) {
        if (predicate.test(t)) {
            result.add(t);
        }
    }
    return result;
}

在这个方法中,类型参数T可以是任何类型。方法参数是一个名为list的泛型列表和一个Predicate类型的Lambda表达式。Predicate是一个函数接口,它定义了一个test方法,该方法接受一个参数并返回一个布尔值。这个方法返回一个包含传递条件的元素的列表。

以下是一个使用泛型方法和Lambda表达式的示例:

List<String> list = Arrays.asList("one", "two", "three");

List<String> filtered = filter(list, s -> s.startsWith("t"));

System.out.println(filtered); // prints [two, three]

在这个例子中,我们使用Lambda表达式s -> s.startsWith("t")来指定过滤条件。这个表达式接受字符串s作为参数并返回一个布尔值,表示该字符串是否以字符"t"开头。filter方法将list和Lambda表达式作为参数,返回一个由满足条件的元素组成的列表。