我知道有四种方法参考:
在本练习中,我发现了另一种形式的方法参考,我想问你它是如何可行的。
class Person{
String name;
String dob;
public Person(String name, String dob){
this.name = name; this.dob = dob;
}
}
class MySorter {
public int compare(Person p1, Person p2){
return p1.dob.compareTo(p2.dob);
}
}
public class SortTest {
public static int diff(Person p1, Person p2){
return p1.dob.compareTo(p2.dob);
}
public static int diff(Date d1, Date d2){
return d1.compareTo(d2);
}
public static void main(String[] args) {
ArrayList<Person> al = new ArrayList<>();
al.add(new Person("Paul", "01012000"));
al.add(new Person("Peter", "01011990"));
al.add(new Person("Patrick", "01012002"));
//INSERT CODE HERE
}
}
在本练习中,有必要指出可以将多少上述行插入到给定代码中,彼此独立,以对al引用的列表进行排序:
我认为正确答案是1和2.但是这个练习的解决方案表明所有线路(1,2和3)都是正确的。
如何创建“new Class:staticMethod”?
非常感谢!
一个。
这三个版本都可以使用:
java.util.Collections.sort(al, (p1, p2)->p1.dob.compareTo(p2.dob));
是lambda版本调用SortTest::diff
java.util.Collections.sort(al, SortTest::diff);
会工作,因为它使用静态方法的方法引用:
public static int diff(Person p1, Person p2){
return p1.dob.compareTo(p2.dob);
}
和
java.util.Collections.sort(al, new MySorter()::compare);
是因为new MySorter()
创建了一个MySorter
类型的对象,然后::compare
将方法引用传递给实例方法compare
,这是合法的