一、介绍
1、Lambda表达式可以被认为是函数式接口的实例。使用Lambda表达式时,需要确定要使用哪种函数式接口,并根据该函数式接口的参数列表和返回类型定义Lambda表达式。
2、作为方法参数:
Lambda表达式可以作为方法参数传递,从而简化代码并使代码更易读。
3.、作为返回值:
Lambda表达式可以作为函数的返回值。这种技术可以用于在运行时根据需要创建函数。
4、作为变量:
Lambda表达式可以分配给变量,从而使其可以像普通函数一样使用。例如,可以将Lambda表达式存储在变量中,然后将该变量传递给方法,以便在另一个方法中使用Lambda表达式。
5、为集合框架中的元素:
Lambda表达式可以作为集合框架中的元素。在这种情况下,Lambda表达式通常用于遍历集合中的元素,并执行某些特定的操作。
6、作为流中的元素:
Lambda表达式可以作为Java 8中的流中的元素。在这种情况下,Lambda表达式用于处理流中的元素,并执行某些特定的操作。
总之,Lambda表达式是Java 8中最重要的新功能之一,它简化了代码并使其更易读。Lambda表达式可以作为函数式接口的实例,方法参数,返回值,变量,集合框架中的元素以及流中的元素。
二、Lambda 表达式核心方法
1、作为函数式接口的实例
interface MyInterface {
void doSomething(String s);
}
// 使用Lambda表达式创建该接口的实例
MyInterface mi = (s) -> System.out.println(s);
// 调用该实例
mi.doSomething("Hello, World!");
说明:在上面的代码中,我们定义了一个函数式接口MyInterface,并使用Lambda表达式创建了该接口的实例mi。Lambda表达式 (s) -> System.out.println(s) 接受一个类型为String的参数,并将其打印到控制台上。然后我们调用实例mi的doSomething方法,并传入一个字符串参数。
2、作为函数式接口的实例
interface MyInterface {
void doSomething(String s);
}
// 使用Lambda表达式创建该接口的实例
MyInterface mi = (s) -> System.out.println(s);
// 调用该实例
mi.doSomething("Hello, World!");
说明:在上面的代码中,我们定义了一个函数式接口MyInterface,并使用Lambda表达式创建了该接口的实例mi。Lambda表达式 (s) -> System.out.println(s) 接受一个类型为String的参数,并将其打印到控制台上。然后我们调用实例mi的doSomething方法,并传入一个字符串参数。
3、作为方法参数
public void invoke(MyInterface mi, String s) {
mi.doSomething(s);
}
// 调用该函数并传入Lambda表达式作为参数
invoke((s) -> System.out.println("Hello, " + s), "World!");
invoke((s) -> System.out.println("Goodbye, " + s), "Java!");
说明:在上面的代码中,我们定义了一个高阶函数invoke,它接受一个MyInterface类型的参数和一个String类型的参数。然后我们调用该函数两次,分别传入两个Lambda表达式作为参数。第一个Lambda表达式接受一个String类型的参数,并将其打印到控制台上。第二个Lambda表达式也接受一个String类型的参数,并将其打印到控制台上。
4、作为返回值
public MyInterface create(String message) {
return (s) -> System.out.println(message + " " + s);
}
// 调用该函数并使用返回的Lambda表达式
MyInterface mi1 = create("Hello,");
MyInterface mi2 = create("Goodbye,");
mi1.doSomething("World!");
mi2.doSomething("Java!");
说明:在上面的代码中,我们定义了一个高阶函数create,它接受一个String类型的参数,并返回一个MyInterface类型的Lambda表达式。我们将该Lambda表达式存储在mi1和mi2变量中,然后输出一个MyInterface函数
三、Lambda表达式的常用函数方法
1、Consumer使用
List<String> list = Arrays.asList("hello", "world");
// 使用 Lambda 表达式遍历 List,并打印其中的元素
list.forEach(str -> System.out.println(str));
说明:Consumer 接口接受一个参数并没有返回值,它表示执行某些操作但不返回任何结果,上面的代码中,我们使用了 Consumer 接口的 forEach 方法来遍历 list,并打印其中的字符串。
2、Supplier使用
// 使用 Lambda 表达式创建 Supplier
Supplier<String> supplier = () -> "Hello, World!";
// 输出 supplier 返回的值
System.out.println(supplier.get());
说明:Supplier 接口不接受任何参数,但返回一个值,它表示一个函数,用于从某个地方获取一个值。上面的代码中,我们使用 Lambda 表达式创建了一个 Supplier,它返回字符串 "Hello, World!",并使用 get 方法获取该值并打印到控制台上。
3、Function使用
// 使用 Lambda 表达式将一个字符串转换为大写字母
Function<String, String> function = str -> str.toUpperCase();
String result = function.apply("hello, world");
System.out.println(result);
说明:Function 接口接受一个参数并返回一个值,它表示一个函数,用于将某些值转换为其他类型的值。上面的代码中,我们使用 Lambda 表达式创建了一个 Function,将字符串转换为大写字母,并将其应用于字符串 "hello, world",最后输出转换后的结果。
4、Predicate使用
List<String> list = Arrays.asList("hello", "world");
// 使用 Lambda 表达式过滤出长度大于 5 的字符串
list.stream().filter(str -> str.length() > 5).forEach(System.out::println);
说明:Predicate 接口接受一个参数并返回一个布尔值,它表示一个函数,用于测试某些条件是否成立。上面的代码中,我们使用 Lambda 表达式创建了一个 Predicate,测试字符串长度是否大于 5,然后使用 filter 方法过滤出符合条件的字符串,并使用 forEach 方法遍历并打印这些字符串。
5、BinaryOperator使用
BinaryOperator<Integer> operator = (x, y) -> x + y;
int result = operator.apply(1, 2);
System.out.println(result); // 输出 3
说明:BinaryOperator 接口继承自 BiFunction 接口,接受两个同类型参数并返回一个同类型值,它表示一个函数,用于执行某种操作并返回结果。上面的代码中,我们使用 Lambda 表达式创建了一个 BinaryOperator,它将两个整数相加,并将其应用于 1 和 2,最后输出结果 3。
6、BiConsumer使用
Map<String, Integer> map = new HashMap<>();
// 使用 Lambda 表达式向 Map 中添加元素
BiConsumer<String, Integer> biConsumer = (key, value) -> map.put(key, value);
biConsumer.accept("one", 1);
biConsumer.accept("two", 2);
System.out.println(map); // 输出 {one=1, two=2}
说明:BiConsumer 接口接受两个参数并没有返回值,它表示执行某些操作但不返回任何结果。上面的代码中,我们使用 Lambda 表达式创建了一个 BiConsumer,将键值对添加到 Map 中,并输出 Map 的内容。
7、BiFunction使用
// 使用 Lambda 表达式将两个字符串连接起来
BiFunction<String, String, String> biFunction = (str1, str2) -> str1 + str2;
String result = biFunction.apply("hello, ", "world!");
System.out.println(result); // 输出 "hello, world!"
说明:BiFunction 接口接受两个参数并返回一个值,它表示一个函数,用于将两个值合并为一个值。上面的代码中,我们使用 Lambda 表达式创建了一个 BiFunction,将两个字符串连接起来,并将其应用于 "hello, " 和 "world!",最后输出结果 "hello, world!"。
8、UnaryOperator使用
UnaryOperator<Integer> operator = x -> x + 1;
int result = operator.apply(1);
System.out.println(result); // 输出 2
说明:UnaryOperator 接口继承自 Function 接口,接受一个同类型参数并返回一个同类型值,它表示一个函数,用于执行某种操作并返回结果。上面的代码中,我们使用 Lambda 表达式创建了一个 UnaryOperator,它将输入值加 1,并将其应用于整数 1,最后输出结果 2。文章来源:https://www.toymoban.com/news/detail-449872.html
9、BiPredicate使用
BiPredicate<String, Integer> biPredicate = (str, length) -> str.length() > length;
boolean result1 = biPredicate.test("hello", 4);
boolean result2 = biPredicate.test("world", 5);
System.out.println(result1); // 输出 true
System.out.println(result2); // 输出 false
说明:BiPredicate 接口接受两个参数并返回一个布尔值,它表示一个函数,用于测试两个条件是否成立。上面的代码中,我们使用 Lambda 表达式创建了一个 BiPredicate,测试字符串长度是否大于给定长度,然后将其应用于两个字符串和不同的长度,最后输出结果文章来源地址https://www.toymoban.com/news/detail-449872.html
到了这里,关于Lambda 开发效率提升不止一点点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!