lambda 表达式实际上是在幕后实现 java 接口吗?
Is lambda expression actually implementing java interface under the hood?
下面是使用 lambda 表达式作为 sort()
方法参数的 java 程序。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Dummy {
public static void main(String[] args) {
List<String> a1 = new ArrayList<String>();
a1.add("Zara");
a1.add("Mahnaz");
a1.add("Ayan");
Collections.sort(a1,
(p1, p2) -> p1.compareTo(p2)
);
System.out.println(a1.toString());
} //end main
}
使用 Eclipse,当我在 sort()
方法上说 F3
时,控件实际上再次转到 java 7 版本中使用的相同 sort()
方法签名(定义) .
@SuppressWarnings({"unchecked", "rawtypes"})
public static <T> void sort(List<T> list, Comparator<? super T> c) {
//whatever
}
在我的代码中,sort()
方法中第二个参数的语法是否实际上等同于在后台实现 interface Comparator<T>
?像
class ComparePersonsbyName implements Comparator<String>{
public int compareTo(String p1, String p2){
return p1.compareTo(p2);
}
}
Collections.sort(a1, new ComparePersonsbyName());
是的,Comparator is a functional interface
下面是使用 lambda 表达式作为 sort()
方法参数的 java 程序。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Dummy {
public static void main(String[] args) {
List<String> a1 = new ArrayList<String>();
a1.add("Zara");
a1.add("Mahnaz");
a1.add("Ayan");
Collections.sort(a1,
(p1, p2) -> p1.compareTo(p2)
);
System.out.println(a1.toString());
} //end main
}
使用 Eclipse,当我在 sort()
方法上说 F3
时,控件实际上再次转到 java 7 版本中使用的相同 sort()
方法签名(定义) .
@SuppressWarnings({"unchecked", "rawtypes"})
public static <T> void sort(List<T> list, Comparator<? super T> c) {
//whatever
}
在我的代码中,sort()
方法中第二个参数的语法是否实际上等同于在后台实现 interface Comparator<T>
?像
class ComparePersonsbyName implements Comparator<String>{
public int compareTo(String p1, String p2){
return p1.compareTo(p2);
}
}
Collections.sort(a1, new ComparePersonsbyName());
是的,Comparator is a functional interface