怎么用wordpress建立本地网站,金华网站建设哪家好,网站注册系统源码,网站上传文件代码我是南城余#xff01;阿里云开发者平台专家博士证书获得者#xff01;
欢迎关注我的博客#xff01;一同成长#xff01;
一名从事运维开发的worker#xff0c;记录分享学习。
专注于AI#xff0c;运维开发#xff0c;windows Linux 系统领域的分享#xff01;
本…我是南城余阿里云开发者平台专家博士证书获得者
欢迎关注我的博客一同成长
一名从事运维开发的worker记录分享学习。
专注于AI运维开发windows Linux 系统领域的分享
本章节对应知识库
https://www.yuque.com/nanchengcyu/java
本内容来自尚硅谷课程此处在知识库做了个人理解 ———————————————— Lambda表达式是可以简化函数式接口的变量或形参赋值的语法。而方法引用和构造器引用是为了简化Lambda表达式的。
4.1 方法引用
当要传递给Lambda体的操作已经有实现的方法了可以使用方法引用
方法引用可以看做是Lambda表达式深层次的表达。换句话说方法引用就是Lambda表达式也就是函数式接口的一个实例通过方法的名字来指向一个方法可以认为是Lambda表达式的一个语法糖。 语法糖Syntactic sugar也译为糖衣语法是由英国计算机科学家彼得·约翰·兰达Peter J. Landin发明的一个术语指计算机语言中添加的某种语法这种语法对语言的功能并没有影响但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性从而减少程序代码出错的机会。 4.1.1 方法引用格式 格式使用方法引用操作符 “::” 将类(或对象) 与 方法名分隔开来。 两个:中间不能有空格而且必须英文状态下半角输入 如下三种主要使用情况 情况1对象 :: 实例方法名情况2类 :: 静态方法名情况3类 :: 实例方法名
4.1.2 方法引用使用前提
**要求1**Lambda体只有一句语句并且是通过调用一个对象的/类现有的方法来完成的
例如System.out对象调用println()方法来完成Lambda体
Math类调用random()静态方法来完成Lambda体
要求2
针对情况1函数式接口中的抽象方法a在被重写时使用了某一个对象的方法b。如果方法a的形参列表、返回值类型与方法b的形参列表、返回值类型都相同则我们可以使用方法b实现对方法a的重写、替换。
针对情况2函数式接口中的抽象方法a在被重写时使用了某一个类的静态方法b。如果方法a的形参列表、返回值类型与方法b的形参列表、返回值类型都相同则我们可以使用方法b实现对方法a的重写、替换。
针对情况3函数式接口中的抽象方法a在被重写时使用了某一个对象的方法b。如果方法a的返回值类型与方法b的返回值类型相同同时方法a的形参列表中有n个参数方法b的形参列表有n-1个参数且方法a的第1个参数作为方法b的调用者且方法a的后n-1参数与方法b的n-1参数匹配类型相同或满足多态场景也可以
例如t-System.out.println(t)
() - Math.random() 都是无参
4.1.3 举例
public class MethodRefTest {// 情况一对象 :: 实例方法//Consumer中的void accept(T t)//PrintStream中的void println(T t)Testpublic void test1() {ConsumerString con1 str - System.out.println(str);con1.accept(北京);System.out.println(*******************);PrintStream ps System.out;ConsumerString con2 ps::println;con2.accept(beijing);}//Supplier中的T get()//Employee中的String getName()Testpublic void test2() {Employee emp new Employee(1001,Tom,23,5600);SupplierString sup1 () - emp.getName();System.out.println(sup1.get());System.out.println(*******************);SupplierString sup2 emp::getName;System.out.println(sup2.get());}// 情况二类 :: 静态方法//Comparator中的int compare(T t1,T t2)//Integer中的int compare(T t1,T t2)Testpublic void test3() {ComparatorInteger com1 (t1,t2) - Integer.compare(t1,t2);System.out.println(com1.compare(12,21));System.out.println(*******************);ComparatorInteger com2 Integer::compare;System.out.println(com2.compare(12,3));}//Function中的R apply(T t)//Math中的Long round(Double d)Testpublic void test4() {FunctionDouble,Long func new FunctionDouble, Long() {Overridepublic Long apply(Double d) {return Math.round(d);}};System.out.println(*******************);FunctionDouble,Long func1 d - Math.round(d);System.out.println(func1.apply(12.3));System.out.println(*******************);FunctionDouble,Long func2 Math::round;System.out.println(func2.apply(12.6));}// 情况三类 :: 实例方法 (有难度)// Comparator中的int comapre(T t1,T t2)// String中的int t1.compareTo(t2)Testpublic void test5() {ComparatorString com1 (s1,s2) - s1.compareTo(s2);System.out.println(com1.compare(abc,abd));System.out.println(*******************);ComparatorString com2 String :: compareTo;System.out.println(com2.compare(abd,abm));}//BiPredicate中的boolean test(T t1, T t2);//String中的boolean t1.equals(t2)Testpublic void test6() {BiPredicateString,String pre1 (s1,s2) - s1.equals(s2);System.out.println(pre1.test(abc,abc));System.out.println(*******************);BiPredicateString,String pre2 String :: equals;System.out.println(pre2.test(abc,abd));}// Function中的R apply(T t)// Employee中的String getName();Testpublic void test7() {Employee employee new Employee(1001, Jerry, 23, 6000);FunctionEmployee,String func1 e - e.getName();System.out.println(func1.apply(employee));System.out.println(*******************);FunctionEmployee,String func2 Employee::getName;System.out.println(func2.apply(employee));}}4.2 构造器引用
当Lambda表达式是创建一个对象并且满足Lambda表达式形参正好是给创建这个对象的构造器的实参列表就可以使用构造器引用。
格式类名::new
举例
public class ConstructorRefTest {//构造器引用//Supplier中的T get()//Employee的空参构造器Employee()Testpublic void test1(){SupplierEmployee sup new SupplierEmployee() {Overridepublic Employee get() {return new Employee();}};System.out.println(*******************);SupplierEmployee sup1 () - new Employee();System.out.println(sup1.get());System.out.println(*******************);SupplierEmployee sup2 Employee :: new;System.out.println(sup2.get());}//Function中的R apply(T t)Testpublic void test2(){FunctionInteger,Employee func1 id - new Employee(id);Employee employee func1.apply(1001);System.out.println(employee);System.out.println(*******************);FunctionInteger,Employee func2 Employee :: new;Employee employee1 func2.apply(1002);System.out.println(employee1);}//BiFunction中的R apply(T t,U u)Testpublic void test3(){BiFunctionInteger,String,Employee func1 (id,name) - new Employee(id,name);System.out.println(func1.apply(1001,Tom));System.out.println(*******************);BiFunctionInteger,String,Employee func2 Employee :: new;System.out.println(func2.apply(1002,Tom));}}package com.atguigu.java2;/*** author 尚硅谷-宋红康 邮箱shkstart126.com*/
public class Employee {private int id;private String name;private int age;private double salary;public int getId() {return id;}public void setId(int id) {this.id id;}public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {return age;}public void setAge(int age) {this.age age;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary salary;}public Employee() {System.out.println(Employee().....);}public Employee(int id) {this.id id;System.out.println(Employee(int id).....);}public Employee(int id, String name) {this.id id;this.name name;}public Employee(int id, String name, int age, double salary) {this.id id;this.name name;this.age age;this.salary salary;}Overridepublic String toString() {return Employee{ id id , name name \ , age age , salary salary };}}
4.3 数组构造引用
当Lambda表达式是创建一个数组对象并且满足Lambda表达式形参正好是给创建这个数组对象的长度就可以数组构造引用。
格式数组类型名::new
举例
//数组引用
//Function中的R apply(T t)
Test
public void test4(){FunctionInteger,String[] func1 length - new String[length];String[] arr1 func1.apply(5);System.out.println(Arrays.toString(arr1));System.out.println(*******************);FunctionInteger,String[] func2 String[] :: new;String[] arr2 func2.apply(10);System.out.println(Arrays.toString(arr2));}