- 简介
- 实例
- 静态方法引用 (类名::方法名)
- 实例方法引用 (实例名::方法名)
- 无参构造方法引用 (类名::new)
- 有参构造方法引用 (类名::new)
- 特殊实例方法引用 (Person::compareTo)
- 数组引用 (数组数据类型::new)
简介
Lambda表达式是Java 8中添加的一个新特性,可以认为,Lambda是一个匿名函数(相似于匿名内部类),作用是返回一个实现了接口的对象(这个观点非常重要,贯穿于Lambda表达式的整个使用过程)。使用Lambda表达式对比于其他接口实现方式显得非常简洁。
实例创建一个Person类:
public class Person implements Comparable {
private String nickname;
private int gender;
public Person() {
}
public Person(String nickname, int gender) {
this.nickname = nickname;
this.gender = gender;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public static int staticSum(int a, int b) {
return a + b;
}
public int sum(int a, int b) {
return a + b;
}
@Override
public String toString() {
return "Person{" +
"nickname='" + nickname + '\'' +
", gender=" + gender +
'}';
}
@Override
public int compareTo(Object o) {
Person person = (Person) o;
int x = this.gender - person.getGender();
int y = this.nickname.hashCode() - person.getNickname().hashCode();
if (x != 0) {
return x;
} else if (y != 0) {
return y;
} else {
return 0;
}
}
}
静态方法引用 (类名::方法名)
@Test
public void test(){
BiFunction<Integer, Integer, Integer> sum = Person::staticSum;
Integer apply = sum.apply(10, 20);
System.out.println(apply);
}
实例方法引用 (实例名::方法名)
@Test
public void test01(){
Person person = new Person();
BiFunction<Integer, Integer, Integer> sum = person::sum;
Integer apply = sum.apply(20, 20);
System.out.println(apply);
}
无参构造方法引用 (类名::new)
@Test
public void test03() {
Supplier<Person> supplier = Person::new;
Person person = supplier.get();
System.out.println(person);
}
有参构造方法引用 (类名::new)
@Test
public void test04() {
Supplier<Person> supplier = Person::new;
Person person = supplier.get();
person.setNickname("路飞");
person.setGender(1);
System.out.println(person);
}
特殊实例方法引用 (Person::compareTo)
@Test
public void test05(){
BiFunction<Person, Person, Integer> person = Person::compareTo;
Person person1 = new Person("路飞",1);
Person person2 = new Person("路飞",1);
Person person3 = new Person("娜美",0);
Integer apply = person.apply(person1,person2);
if(apply != 0){
System.out.println("person01和person02不是同一个对象");
}else{
System.out.println("person01和person02是同一个对象");
}
Integer apply1 = person.apply(person1,person3);
if(apply1 != 0){
System.out.println("person01和person03不是同一个对象");
}else{
System.out.println("person01和person03是同一个对象");
}
}
或者使用下列写法:
@Test
public void test06() {
ToIntBiFunction<Person, Person> function = Person::compareTo;
Person person1 = new Person("路飞", 1);
Person person2 = new Person("路飞", 1);
int i = function.applyAsInt(person1, person2);
if (i != 0) {
System.out.println("不是同一个对象");
} else {
System.out.println("是同一个对象");
}
}
数组引用 (数组数据类型::new)
@Test
public void test07(){
Function<Integer,String[]> function = String[]::new;
String[] apply = function.apply(5);
System.out.println("该数组长度>>>" + apply.length);
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)