1.格式
- 方法没有参数: () -> {};
方法有参数::(param1,param2,param3,...) -> {};
1.要使用创建接口 StudentMsg的实现类,
2.并且该类只是使用一次,可以使用匿名内部类的方式,
3.但是匿名内部类编写起来很麻烦。而 StudentMsg接口中
4.有且仅只有一个抽象方法,这是一个典型的函数式接口
5.使用 lambda 来代替匿名内部类。lambda 体就是接口的实现。
public class TestOne {
/**
* 创建一个StudentMsg接口
*/
@FunctionalInterface
interface StudentMsg {
public void getName(String name);
}
public static void main(String[] args) {
StudentMsg studentMsg = (name) -> {
System.out.println("名字为:"+name);
};
studentMsg.getName("小明");
}
}
2.在 -> 右边的方法体中,如果只有一行语句,那么 可以省略大括号
于是就出现了下面的
public class TestOne {
/**
* 创建一个StudentMsg接口
*/
@FunctionalInterface
interface StudentMsg {
public void getName(String name);
}
public static void main(String[] args) {
//在 -> 右边的方法体中,如果只有一行语句,那么 可以省略大括号
StudentMsg studentMsg = (name) -> System.out.println("名字为:"+name);;
studentMsg.getName("小明");
}
}
3. lambda 方法如果只有一个参数,则小括号可以省略
反之方法如果没有参数或有两个及以上的参数,则 小括号不能省略
上面的还可以改造成:
public class TestOne {
/**
* 创建一个StudentMsg接口
*/
@FunctionalInterface
interface StudentMsg {
public void getName(String name);
}
public static void main(String[] args) {
//在 -> 右边的方法体中,如果只有一行语句,那么 可以省略大括号
//lambda 方法如果没有参数或有两个及以上的参数,则 小括号不能省略
StudentMsg studentMsg = name -> System.out.println("名字为:"+name);;
studentMsg.getName("小明");
}
}
4.Lambda 方法体如果只有一行语句,则 大括号和return都可省略
我们改造一下上面的方法,变为有返回值的
public class TestOne {
/**
* 创建一个StudentMsg接口
*/
@FunctionalInterface
interface StudentMsg {
public String getName(String name,Integer age);
}
public static void main(String[] args) {
StudentMsg studentMsg = (name,age)-> {
return "名字为:"+name+"年龄为:"+age;
};
studentMsg.getName("小明",15);
}
}
那么按照:Lambda 方法体如果只有一行语句,则 大括号和return都可省略,可以继续简化
注意:省略了大括号,必须省略 return。
反之省略了 return ,则必须省略 {}。
必须成对出现,或者都不出现。
public class TestOne {
/**
* 创建一个StudentMsg接口
*/
@FunctionalInterface
interface StudentMsg {
public String getName(String name,Integer age);
}
public static void main(String[] args) {
/**
* 在 -> 右边的方法体中,如果只有一行语句,那么 可以省略大括号
* lambda 方法如果没有参数或有两个及以上的参数,则 小括号不能省略;
* lambda 方法体如果只有一行语句,则 大括号和return都可省略
*/
StudentMsg studentMsg = (name,age)->"名字为:"+name+"年龄为:"+age;
studentMsg.getName("小明",15);
}
}
Lambda 表达式使用总结
- lambda 表达式形式为 ()->{},-> 左边是抽象方法的形参列表, -> 是抽象方法的实现体。
- lambda 方法如果没有参数或有两个及以上的参数,则 小括号不能省略。(换言之:有且只有一个参数的时候才可以省略小括号)
- lambda 方法如果只有一个参数,则小括号可以省略。
- lambda 方法体如果只有一行语句,则 大括号和return必须都省略。(也就是说:省略了大括号,则必须省略 return,省略了 return ,则必须省略 {},这俩要么成对出现,要么都不出现。)