Lambda基本语法
如下为lambda基础语法
public class Syntax1 {
public static void main(String[] args) {
/* 1、lambda基本语法 */
// ():用来描述参数列表
// {}:用来描述方法体;单行时可省略
// ->:lambda运算符,读作goes to
// 无参无返回
NoRetNoParam lambda1 = () -> {
System.out.println("helloWorld");
};
lambda1.test();
// 单参数无返回值
NoRetSingleParam lambda2 = (int a) -> {
System.out.println(a);
};
lambda2.test(11);
// 多参数无返回
NoRetMutipleParam lambda3 = (a, b) -> {
System.out.println(a + b);
};
lambda3.test(1, 2);
// 无参有返回
SingleRetNoParam lambda4 = () -> {
System.out.println(100);
return 100;
};
lambda4.test();
// 单参数有返回值
SingleRetSingleParam lambda5 = (a) -> {
return ++a;
};
lambda5.test(100);
// 多参数有返回值
SingleRetMutipleParam lambda6 = (a, b) -> {
return a + b;
};
lambda6.test(1, 2);
}
}
Lambda语法精简
上述lambda语法还可以精简,减少代码量。
- 单个参数时,可省略();
- 当lambda表达式只有一行时,可以省略{};
- 如果方法体中唯一一条语句是返回语句,则在省略到{]同时,也必须省略到return。
上述代码精简过后:
public class Syntax1 {
public static void main(String[] args) {
/* 1、lambda基本语法 */
// ():用来描述参数列表
// {}:用来描述方法体;单行时可省略
// ->:lambda运算符,读作goes to
// 无参无返回
NoRetNoParam lambda1 = () -> System.out.println("helloWorld");
lambda1.test();
// 单参数无返回值
NoRetSingleParam lambda2 = a -> System.out.println(a);
lambda2.test(11);
// 多参数无返回
NoRetMutipleParam lambda3 = (a, b) -> System.out.println(a + b);
lambda3.test(1, 2);
// 无参有返回
SingleRetNoParam lambda4 = () -> {
System.out.println(100);
return 100;
};
lambda4.test();
// 单参数有返回值
SingleRetSingleParam lambda5 = a -> ++a;
lambda5.test(100);
// 多参数有返回值
SingleRetMutipleParam lambda6 = (a, b) -> a + b;
lambda6.test(1, 2);
}
}
Lambda方法引用
一般方法引用
public class Syntax2 {
public static void main(String[] args) {
// 复杂方式
SingleRetSingleParam lambda1 = a -> a * 2;
SingleRetSingleParam lambda2 = a -> a * 2;
// 方法抽象
SingleRetSingleParam lambda3 = a -> change(3);
// 方法引用
// 可以快速将一个lambda表达式的实现指向一个已经实现的方法
// 语法:方法拥有者::方法名
// 注意:1、参数数量和类型一定要和接口中定义的一致;2、返回值的类型也一定要和接口中定义的方法一致
/* 静态方法 */
SingleRetSingleParam lambda4 = Syntax2::change;
int num = lambda4.test(3);
}
private static int change(int a) {
return a * 2;
}
}
构造方法引用
public class Syntax3 {
public static void main(String[] args) {
PersonCreater person = () -> new Person();
/*构造方法引用*/
PersonCreater person1 = Person::new;
Person a = person1.getPerson();
PersonCreaterParam person2 = Person::new;
Person b = person2.getPerson("Sam", 20);
}
}
interface PersonCreater {
Person getPerson();
}
interface PersonCreaterParam {
Person getPerson(String name, Integer age);
}
/*人物类*/
public class Person {
private String name;
private Integer age;
public Person() {
}
public Person(String name, Integer age) {
this.name = name;
this.age = age;
System.out.println("age=" + age + "name=" + name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}