山东建设执业师专业官方网站,北京市住房城乡建设厅网站首页,数商云科技,做啥网站比较好赚钱1.函数式接口 函数式接口#xff08;Functional Interface#xff09;就是一个有且仅有一个抽象方法#xff08;通俗来说就是只有一个方法要去被实现#xff0c;因此我们也能通过这个去动态推断参数类型#xff09;#xff0c;但是可以拥有多个非抽象方法的接口。函数式接…1.函数式接口 函数式接口Functional Interface就是一个有且仅有一个抽象方法通俗来说就是只有一个方法要去被实现因此我们也能通过这个去动态推断参数类型但是可以拥有多个非抽象方法的接口。函数式接口可以被隐式转换为lambda表达式。通常被用在Lambda表达式和方法引用上。 2.Lambda表达式与::方法引用
方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法。方法引用提供了一种引用而不执行方法的方式它需要由兼容的函数式接口构成的目标类型上下文。计算时方法引用会创建函数式接口的一个实例。
当Lambda表达式中只是执行一个方法调用时不用Lambda表达式直接通过方法引用的形式可读性更高一些。方法引用是一种更简洁易懂的Lambda表达式 举例 Person类结构package com.yukuanyan.entity;public class Person {private String name;private Integer age;public Person() {}public Person(String name, Integer age) {this.name name;this.age age;}public static int compare(Person a,Person b) {int r a.getAge().compareTo(b.getAge());if (r ! 0) {return r;} else {return a.getName().compareTo(b.getName());}}public static int compare(Person a,Person b,Person c) {return 0;}public Person concat(Person b) {this.setName(this.getName() , b.getName());System.out.println(this);return this;}Overridepublic String toString() {return Person{ name name \ , age age };}public void setName(String name) {this.name name;}public void setAge(Integer age) {this.age age;}public String getName() {return name;}public Integer getAge() {return age;}
}case1
package com.yukuanyan.cases;import com.yukuanyan.entity.Person;import java.util.Arrays;
import java.util.Comparator;
import java.util.List;public class case1 {public static void main(String[] args) {ListPerson personList Arrays.asList(new Person(zhangsan,33),new Person(lisi,22),new Person(wangwu,11));// 传统写法personList.sort(new ComparatorPerson() {Overridepublic int compare(Person o1, Person o2) {return o1.getAge() - o2.getAge();}});// Lambda 写法personList.sort((a,b) - Person.compare(a,b));// 方法引用写法调用static方法参数类型动态推断personList.sort(Person::compare);System.out.println(personList);}
}运行结果case2正式工作中用的比较多的stream流应用
package com.yukuanyan.cases;import com.yukuanyan.entity.Person;import java.util.Arrays;
import java.util.List;public class case2 {public static void main(String[] args) {ListPerson personList Arrays.asList(new Person(zhangsan,33),new Person(lisi,22),new Person(wangwu,11));personList.stream().sorted(Person::compare).forEach(System.out::println);}
}case3调用对象方法
package com.yukuanyan.cases;import com.yukuanyan.entity.Person;import java.util.Arrays;
import java.util.List;public class case3 {public static void main(String[] args) {ListPerson personList Arrays.asList(new Person(zhangsan,33),new Person(lisi,22),new Person(wangwu,11));Person p new Person(zhaoliu,44);personList.stream().sorted(Person::compare).forEach(p::concat);}
}case4::new实例化对象
package com.yukuanyan.cases;import com.yukuanyan.entity.Person;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;public class case4 {public static void main(String[] args) {ListPerson personList Arrays.asList(new Person(zhangsan,33),new Person(lisi,22),new Person(wangwu,11));Person p new Person(zhaoliu,44);personList.stream().sorted(Person::compare).collect(Collectors.toCollection(ArrayList::new));}
}