方法引用
从JDK1.8开始,可以使用方法引用。
我们用Lambda表达式来实现匿名方法。但有些情况下,我们用Lambda表达式仅仅是调用一些已经存在的方法,除了调用动作外,没有其他任何多余的动作,在这种情况下,我们倾向于通过方法名来调用它,而Lambda表达式可以帮助我们实现这一要求,它使得Lambda在调用那些已经拥有方法名的方法的代码更简洁、更容易理解。方法引用可以理解为Lambda表达式的另外一种表现形式。
如果lambda表达式方法体中只是调用一个特定的已经存在的方法,则可以使用方法引用
常见形式:
类型 | 语法 | 对应的Lambda表达式 |
---|---|---|
静态方法引用 | 类名::staticMethod | (args) -> 类名.staticMethod(args) |
实例方法引用 | inst::instMethod | (args) -> inst.instMethod(args) |
对象方法引用 | 类名::instMethod | (inst,args) -> inst.instMethod(args) |
构建方法引用 | 类名::new | (args) -> new 类名(args) |
1、静态方法引用举例
package com.hong.method;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Random;
import java.util.UUID;
/**
* @Author hongCheng
* @Date 2021/4/25 17:46
* @Version 1.0
*/
public class StaticTest {
public static void main(String[] args) {
Person[] people = new Person[10];
for (int i = 0; i < 10; i++) {
//random即随机数发生器,使用值卡需要使用Randomize语句进行随机数种子的初始化
// random产生的是伪随机数或者说是用一种复杂的方法计算得到的序列值,
// 因此每次运算时需要一个不同的种子值。种子值不同,得到的序列值也不同。因此也就是真正的随机数。
// VB里用new Random()来表示。
people[i] = new Person(new Random().nextInt(100), UUID.randomUUID().toString().substring(0, 3));
}
//Arrays数组的工具类 Collections是集合的工具类
System.out.println(Arrays.asList(people));
//排序
Arrays.sort(people,new PersonComparator());
System.out.println(Arrays.asList(people));
System.out.println("====改进①====");
Comparator<Person> comparator = (o1, o2)-> o1.getAge(