packagemethodReference;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;importjava.util.function.Supplier;/***@authorjiangxiulian
* @create 2017-12-28 下午12:03
**/
public classMethodReference {public static voidmain(String args[]){//引用构造函数
PersonFactory factory = new PersonFactory(Person::new);//PersonFactory personFactory = new PersonFactory(() ->new Person());
List personList = new ArrayList();
Person p1=factory.getPerson();
p1.setName("Kobe");
personList.add(p1);
Person p2=factory.getPerson();
p2.setName("James");
personList.add(p2);
Person p3=factory.getPerson();
p3.setName("Paul");
personList.add(p3);
Person[] persons1= personList.toArray(newPerson[personList.size()]);
System.out.print("排序前");
printArray(persons1);
System.out.println();//引用静态方法
Arrays.sort(persons1,MethodReference::myCompare);
System.out.print("排序后");
printArray(persons1);
System.out.println();
Person[] persons2= personList.toArray(newPerson[personList.size()]);
System.out.print("排序前");
printArray(persons2);
System.out.println();//引用特定对象的实例方法
Arrays.sort(persons2,p1::compare);
System.out.print("排序后");
printArray(persons2);
System.out.println();
Person[] persons3= personList.toArray(newPerson[personList.size()]);
System.out.print("排序前");
printArray(persons3);//引用特定类型的任意对象的实例方法
Arrays.sort(persons3,Person::compareTo);
System.out.print("排序后");
printArray(persons3);
}public static voidprintArray(Person[] persons) {for(Person p : persons) {
System.out.print(p.name+ " ");
}
System.out.println();
}public static intmyCompare(Person p1, Person p2) {returnp1.getName().compareTo(p2.getName());
}static classPerson{privateString name;publicPerson(){
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}public intcompare(Person p1,Person p2){returnp1.getName().compareTo(p2.getName());
}public intcompareTo(Person p){return this.getName().compareTo(p.getName());
}
}static classPersonFactory{private Suppliersupplier;public PersonFactory(Suppliersupplier){this.supplier =supplier;
}publicPerson getPerson(){returnsupplier.get();
}
}
}