✨这里是第七人格的博客✨小七,欢迎您的到来~✨
🍅系列专栏:无🍅
✈️本篇内容: Lamda表达式和函数式接口✈️
🍱本篇收录完整代码地址:无🍱
楔子
仅以此篇献给曾经被Lamda惊艳到的自己,和爱好学习的你。
Lamda表达式
简介
Lambda表达式是一种匿名函数,它允许我们将函数作为参数传递给其他函数或者作为返回值使用。在Java中,它是Java 8引入的一个新特性。Lambda表达式通常用于实现函数式接口,例如Runnable、Callable、Comparator等接口。
基本语法
Lambda表达式的基本语法如下:
(parameters) -> expression
(parameters) -> {expression;}
其中,parameters
是函数的参数列表,可以有任意多个参数;expression
是一个关于参数的简单表达式,它将根据参数计算并返回一个值。如果 expression
只包含一个表达式,那么可以省略括号。
以下是一些Lambda表达式的例子:
1. 定义一个简单的Lambda函数,接受两个整数参数并返回它们的和:
int add = (x, y) -> x + y;
int result = add(3, 4); // result = 7
2. 使用Lambda表达式对列表进行排序:
List<Integer> numbers = Arrays.asList(1, 5, 2, 8, 3);
Collections.sort(numbers, (x, y) -> x - y);
System.out.println(numbers); // 输出:[1, 2, 3, 5, 8]
在这个例子中,我们使用Lambda表达式作为 Collections.sort()
方法的比较器,该比较器接受一个函数(在这里是 (x, y) -> x - y
),用于确定排序时每个元素的比较方式。这里,我们使用了一个减号来实现升序排序。
小结
1、Lamda表达式是Java8引入的函数式编程风格。
2、可以看作是匿名函数的语法糖。
3、它方法的参数传递的是函数。
函数式接口
简介
函数式接口是Java 8引入的一个新特性,它允许我们使用Lambda表达式来简化代码。函数式接口是只有一个抽象方法的接口,可以使用Lambda表达式来实现该接口的方法。例如:
@FunctionalInterface
public interface MyFunctionalInterface {
void execute();
}
注:@FunctionalInterface注解仅是标注作用,可以不写
上面的代码定义了一个名为MyFunctionalInterface
的函数式接口,该接口只有一个抽象方法execute()
。我们可以使用Lambda表达式来实现该方法,如下所示:
MyFunctionalInterface myFunc = () -> System.out.println("www.52javaee.com, Lambda!");
myFunc.execute(); // 输出:www.52javaee.com, Lambda!
除了匿名类,我们还可以使用Lambda表达式来传递参数并实现函数式接口的方法。例如:
@FunctionalInterface
public interface MyFunctionalInterface {
void execute(String message);
}
public class Main {
public static void main(String[] args) {
MyFunctionalInterface myFunc = (message) -> System.out.println(message);
myFunc.execute("www.52javaee.com, Lambda!"); // 输出:www.52javaee.com, Lambda!
}
}
方法引用
他是一种简化写法,基本语法如下
object/className :: method
举个例子
(message) -> System.out.println(message)
可以改写成
System.out::println
Java内置常用函数接口
接口 | 参数 | 返回类型 | 描述 |
---|---|---|---|
Predicate< T > | T | boolean | 用于判断一个对象,满足条件返回true。 |
Consumer< T > | T | void | 用于接收一个对象进行处理但并不返回。 |
Function<T,R> | T | T | 转换一个对象为不同类型的对象 |
Supplier< T > | None | T | 提供一个对象 |
UnaryOperator< T > | T | T | 接收并返回同类型的对象 |
BinaryOperator< T > | (T,T) | T | 接收2个同类型对象,返回一个同类型对象 |
小结
1、接口中只有一个抽象方法
2、@FunctionalInterface注解仅是标注作用,可以不写
总结
本文主要介绍了Java 8引入的Lambda表达式和函数式接口。Lambda表达式是一种匿名函数,可以作为参数传递给其他函数或作为返回值使用。它允许我们简化代码并提高可读性。函数式接口是只有一个抽象方法的接口,可以使用Lambda表达式来实现该接口的方法。Java内置了一些常用的函数式接口,如Predicate、Consumer、Function等。通过使用这些特性,我们可以更简洁地实现一些常见的功能。
下章预告
Java-Stream