您好,登錄后才能下訂單哦!
怎么在java8中對(duì)函數(shù)進(jìn)行引用?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
函數(shù)引用的類(lèi)型
函數(shù)引用分為以下四種:
Integer::parseInt
String::length
expensiveTransaction::getValue
靜態(tài)函數(shù)
比如:
Function<String, Integer> stringToInteger = (String s) -> Integer.parseInt(s);
可以寫(xiě)作:
Function<String, Integer> stringToInteger = Integer::parseInt;
對(duì)象級(jí)別函數(shù)的引用
BiPredicate<List<String>, String> contains = (list, element) -> list.contains(element);
可以寫(xiě)作:
BiPredicate<List<String>, String> contains = List::contains;
構(gòu)造函數(shù)的引用
下面再舉一個(gè)構(gòu)造函數(shù)的例子, 首先定義一個(gè)函數(shù)式接口,唯一的方法 get 返回指定類(lèi)型的對(duì)象。
@FunctionalInterface public interface Supplier<T> { T get(); }
Supplier<TantanitReader> constructor = () -> new TantanitReader(); TantanitReader tantanitReader = constructor.get();
上述代碼的 lambda 表達(dá)式 new 并返回一個(gè)新的對(duì)象,使得 constructor 變量成為一個(gè)構(gòu)造器的引用。
等價(jià)于以下函數(shù)引用:
Supplier<TantanitReader> constructor2 = TantanitReader::new; TantanitReader tantanitReader2 = constructor2.get();
以上的例子都是沒(méi)有參數(shù)的情況,下面仍然以構(gòu)造函數(shù)為例,介紹有參數(shù)的情況:
public TantanitReader(String loginName) { this.loginName = loginName; }
Function<String,TantanitReader> constructor3 = (loginName) -> new TantanitReader(loginName); TantanitReader tantanitReader3 = constructor3.apply("jack"); Function<String,TantanitReader> constructor4 = TantanitReader::new; TantanitReader tantanitReader4 = constructor4.apply("jack"); TantanitReader tantanitReader5 = constructor4.apply("tom");
這時(shí)由于函數(shù)只有一個(gè)參數(shù),可以使用 Java 自帶的 Function這個(gè)函數(shù)式接口,它實(shí)際起作用的函數(shù)如下:
R apply(T t);
作用為根據(jù)一個(gè)參數(shù),返回一個(gè)結(jié)果。我們由此可以使用 constructor4 以及相應(yīng)的函數(shù)引用 constructor5。
小結(jié)
使用函數(shù)引用不僅可以簡(jiǎn)化 lambda 表達(dá)式,而且在語(yǔ)義上可以更加專(zhuān)注于方法名稱(chēng),也就是要做的事,抽象級(jí)別更加接近人類(lèi)的認(rèn)知。所以,應(yīng)當(dāng)盡可能使用函數(shù)引用。
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。