lambda表达式
Lambda表达式是Java 8中引入的一个重要特性,它允许我们以更简洁的方式编写匿名函数。Lambda表达式通常用于函数式接口(Functional Interface)的实现,这些接口只包含一个抽象方法。
函数式接口是只包含一个抽象方法的接口。通过该接口,java编译器可以推断出lambda中参数类型
lambda表达式的本质是作为了函数式接口的实例
//函数式接口用@FunctionalInterface注解声明
@FunctionalInterface
public interface MyFunctionalInterface{
void method();
}
//利用Lambda表达式实现函数式接口
MyFunctionalInterface m = () -> System.out.println("hello");
函数式接口
四大核心函数接口
Consumer,消费性接口,对类型为T的对象应用操作,包含方法:void accept(T t)
Supplier,供给型接口,返回类型为T的对象,包含方法T get()
Function<T,R>,函数型接口,对类型为T的对象应用操作,并返回结果。结果是R类型的对象,包含方法:R appliy(T t)
Predicate,判断型接口,确定类型为T的独享是否满足某约束,并返回boolean值。包含方法boolean test(T t)
Lambda表达式的语法
/**
* ->:lambda操作符或箭头操作符
* -> 的左边:lambda形参列表,对应着要重写的接口中的抽象方法的形参列表,参数类型可以省略,若形参只有一个,圆括号也可以省略
* -> 的右边:lambda体,对应着接口的实现类要重写的方法的方法体,如果方法体中只执行一行语句,则一对大括号可以省略,如果有return关键字,必须一起省略
*/
(o1,o2)->Integer.compare(o1,o2);
// 1. 无参数,无返回值
Runnable runnable = () -> System.out.println("Hello, Lambda!");
//-------------------------------------------------------
// 2. 一个参数,有返回值
//(第一个integer表示输入参数类型,第二个表示返回值类型)
Function<Integer, Integer> square = x -> x * x;
System.out.println(square.apply(5));
//-------------------------------------------------------
// 3. 多个参数,有返回值
BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;
System.out.println(add.apply(3, 4));
//-------------------------------------------------------
// 4. 集合操作
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// 使用Lambda表达式遍历集合
numbers.forEach(number -> System.out.println(number));
// 使用Lambda表达式进行过滤
List<Integer> evenNumbers = numbers.stream()
.filter(number -> number % 2 == 0)
.collect(Collectors.toList());
//-------------------------------------------------------
// 5. 方法引用
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
// 使用Lambda表达式
names.forEach(name -> System.out.println(name));
// 使用方法引用
names.forEach(System.out::println);
//-------------------------------------------------------
// 6. 线程使用
// 创建线程
Thread thread = new Thread(() -> {
for (int i = 0; i < 5; i++) {
System.out.println("Count: " + i);
}
});
thread.start();
459

被折叠的 条评论
为什么被折叠?



