2015-06-29 37 views
1

下面是使用lambda表達式作爲sort()方法的參數的java程序。lambda表達式實際上是在實現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,當我說F3sort()方法,控制再次實際上是要在Java 7的版本中使用相同的方法sort()簽名(definiton)。

@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()); 
+0

@SkinnyJ我可以說:Collections.sort(A1,(P1,P2) - > p1.compareTo(P2));'執行快速排序並行核心上的算法(當前算法)?因爲lambda表達式語法啓用了這種並行性 – overexchange

+1

您沒有看到與Java 7相同的定義。您發佈的Java 8實現代表['List.sort'](http://docs.oracle.com/javase/ 8/docs/api/java/util/List.html#sort-java.util.Comparator-)在Java 7中不存在。但是,此實現細節與lambda無關。 – Holger

+0

@Holger在jdk 1.6代碼'../java/util/Consumer.java'中,我看到沒有註釋的'sort()'的defi。 – overexchange

回答

4
+0

函數接口是否只有一個函數原型的接口?或功能接口是否可以有多個功能原型? – overexchange

+1

@proxchange修復了答案中的鏈接。引用鏈接頁面:「每個函數接口都有一個抽象方法,稱爲該函數接口的函數方法,lambda表達式的參數和返回類型被匹配或修改。」 –

+1

'int compare(T o1,T o2)'是功能方法 –