2016-11-16 16 views
3

Java 8現在具有功能性接口,如將其參數轉換爲長整型值的ToLongFunction。Java 8 ToLongFunction何時使用它?

我看到了一個例子如下面的代碼:

ToLongFunction<String> i = (x)-> Long.parseLong(x); 

System.out.println(i.applyAsLong("2")); 

的問題是:我爲什麼要實現一個接口只是一個變量轉換爲原始的長,它會更簡單和可讀性只調用方法Long.parseLong(x)?

+1

它用來表示一個匿名函數。如果你有一個高階函數,它接受一個函數在轉換它的參數後必須返回一個很長的函數,你可以將傳遞函數的類型設置爲'ToLongFunction'。 – Carcigenicate

回答

6

簡短的回答是,你不會做到這一點,你只需直接撥打電話Long.parseLong()在這種情況下。

較長的答案一點是你,你有你上面的i確實很少明確聲明的類型ToLongFunction明確的變量,但是寫一個lambda時,而間接使用功能接口作爲目標的該採取的許多功能之一他們。

要從新Stream接口用一個例子,你可能要採取有數值像StringList<String> input對象:["123", "456", ...],並將它們全部解析成的long列表。

你可以做到這一點的東西,如:

long[] result = input.stream().mapToLong(x -> Long.parseLong(x)).toArray(); 

在這裏,你從來沒有直接寫ToLongFunction,而是通過提供一個lambda方法mapToLong(ToLongFunction f),它調用你Long.parseLong(x)方法間接使用它。所以功能界面是幫助完成這項工作的神奇力量。

所以,你會讓間接使用這個接口的所有時間Stream和Java中8其他拉姆達相關的功能,但你可能不經常使用它明確(除非你正在寫這要班接受這樣一個函數)。

+2

在第一句話中,我認爲你的意思是parseLong而不是parseInt –

5

Java 8現在具有功能接口,如將參數轉換爲長整型值的ToLongFunction。

這是ToLongFunction一種誤解:它旨在是任何函數具有原始長輸出,不管是通過Long.parseLong或一些其它完全不同的功能得到;也許它是Person.getIdNumber()

在任何情況下,你應該基本從未引用ToLongFunction當你寫的是接受你想有一個原始long結果的拉姆達的方法除了。否則,直接寫lambda。