📅  最后修改于: 2023-12-03 15:40:44.226000             🧑  作者: Mango
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表达式可以替换一些匿名类(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表达式指定过滤条件。
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表达式作为参数,返回一个由满足条件的元素组成的列表。