lambda 表达式的使用:
- 操作符左边,lambda 形参列表(接口中抽象方法的形参列表)
- 操作符右边,lambda 体
- 总结:
- 操作符左边,形参列表的参数类型可以省略,如果 lambda 形参列表只有一个参数,其中的小括号也可以省略
- 操作符右边,lambda 体应该使用一对{}包裹,如果这个 lambda 体只有一条执行语句(可能是 return 语句),可以省略这一对 {}和 return 关键字
public class LambdaTest1 {
// 语法一:无参无返回值
@Test
public void test1() {
Runnable runnable = () -> System.out.println("我使用了");
runnable.run();
}
// 语法二:有参无返回值
@Test
public void test2() {
Consumer<String> stringConsumer = new Consumer<String>() {
@Override
public void accept(String o) {
System.out.println(o);
}
};
stringConsumer.accept("我是光头小小强007");
Consumer<String> consumer = (String s) -> {
System.out.println(s);
};
consumer.accept("谎言和誓言区别,一个是听得当了真,一个是说了当了真");
}
//语法格式三:数据类型可以省略,因为可以有编译器推断得出,称之为类型推断
@Test
public void test03() {
Consumer<String> consumer = (s) -> {
System.out.println(s);
};
consumer.accept("我的幸福是昨天!");
}
// 语法格式四:Lambda 若只需要一个参数的时候,参数的小括号可以省略
@Test
public void test04() {
Consumer<String> consumer = s -> System.out.println(s);
consumer.accept("我就是我,不一样的烟火");
}
// 语法格式五: lambda 表达式 需要两个或两个以上的参数,多条执行语句,并且可以有返回值
@Test
public void test05() {
Comparator<Integer> comparator = (num1, num2) -> {
System.out.println(num1);
System.out.println(num2);
return Integer.compare(num1, num2);
};
int compare = comparator.compare(10, 20);
System.out.println(compare);
}
// 格式六:当 lambda 体中只有一条语句时, return 与大括号若有,可以省略
@Test
public void test06() {
Comparator<Integer> comparator = (num1, num2) -> num1.compareTo(num2);
int compare = comparator.compare(10, 10);
System.out.println(compare);
}