本文解釋了Java lambdas(Concisise Anonymous函數)以及它們與功能接口(與一個抽象方法的接口)一起使用。它詳細介紹了lambda語法,將它們與匿名的內部類對比,突出了簡潔性和可讀性
Java Lambdas是簡潔的匿名功能,可在Java內提供功能性編程範式。它們本質上是代碼塊,可以作為參數傳遞給方法或存儲在變量中。要使用它們,您需要一個功能界面,該功能接口是一個恰好具有一個抽象方法的接口(儘管它可以具有多個默認方法或靜態方法)。 Lambda表達式的簽名隱式與功能接口的抽象方法匹配。
這是一個使用Runnable
接口(內置功能接口)的簡單示例:
<code class="java">Runnable myRunnable = () -> System.out.println("Hello from a lambda!"); new Thread(myRunnable).start();</code>
該代碼創建一個lambda expression () -> System.out.println("Hello from a lambda!");
這實現了Runnable
接口的run()
方法。空括號()
表明lambda沒有任何參數。箭頭->
將參數列表與身體分開。
使用帶有參數的lambda的另一個示例:
<code class="java">interface StringOperation { String operate(String str); } StringOperation reverseString = (str) -> new StringBuilder(str).reverse().toString(); String reversed = reverseString.operate("hello"); // reversed will be "olleh"</code>
在這裡, StringOperation
是功能接口。 lambda表達式(str) -> new StringBuilder(str).reverse().toString()
採用String
參數( str
)並返回一個反向的String
。
匿名內部類別雖然達到相似的功能,但比lambdas要多得多。使用Lambdas提供了幾個關鍵優勢:
再次考慮Runnable
示例。匿名的內部類相等的是:
<code class="java">Runnable myRunnable = new Runnable() { @Override public void run() { System.out.println("Hello from an anonymous inner class!"); } }; new Thread(myRunnable).start();</code>
顯然,這比Lambda版本更長且表現不佳。
創建自己的功能接口很簡單。只需用一個抽象方法定義一個接口即可。您可以根據需要添加默認方法和靜態方法。 @FunctionalInterface
註釋是可選的,但建議使用。它可以幫助編譯器執行單個抽象方法規則並儘早發現錯誤。
<code class="java">@FunctionalInterface interface MyFunctionalInterface { int calculate(int a, int b); default int add(int a, int b){ return ab; } } // Usage MyFunctionalInterface myOperation = (a, b) -> a * b; int result = myOperation.calculate(5, 3); // result will be 15 int sum = myOperation.add(5,3); // result will be 8</code>
在此示例中, MyFunctionalInterface
是一個具有一個抽象方法calculate()
功能接口。 @FunctionalInterface
註釋指示了這一點。 add()
方法是默認方法。
Java Lambdas得到了許多現有的Java庫和框架的廣泛支持。它們集成到核心Java API中,通常與:
例如,使用lambdas與流API:
<code class="java">List<integer> numbers = Arrays.asList(1, 2, 3, 4, 5); int sum = numbers.stream().map(n -> n * 2).sum(); // sum will be 30</integer></code>
該代碼在流管線中使用lambda n -> n * 2
在總和之前將每個數字加倍。與使用傳統迭代相比,這是一種更乾淨的方法。 Lambdas的廣泛採用使它們成為現代Java開發的重要組成部分。
以上是如何使用Java Lambdas和功能接口?的詳細內容。更多資訊請關注PHP中文網其他相關文章!