「JAVA8」- 神奇的雙":"號

2020-09-22 1024BIT

看如下一行代碼

public class Car { public static Car create(Supplier<Car> supplier){ return supplier.get(); } public static void main(String[] args) { Car car = Car.create(Car::new); List<Integer> integers = new ArrayList<>(); integers.stream().mapToInt(Integer::intValue).sum(); integers.stream().mapToLong(Long::valueOf).sum(); }}

生成Car對象用Car::new

獲取Integer的int值採用Integer::intValue

將Integer轉化成Long採用Long::valueOf即可。

你是否會疑惑這個神奇的&34;是什麼?


這就是我們Java8中的新特性方法引用。

我們可以用一對冒號&34;,通過方法的名字來指向一個方法,可以使語言的構造更緊湊簡潔,減少冗餘代碼。

疑惑,那Car::new返回的是什麼呢?是Car對象嗎?

Car car = Car::new; 報錯Supplier<Car> carSupplier = Car::new; 正確

Car::new 返回的是 Supplier<Car> 對象,生成Car 是carSupplier.get時候初始化。

那Integer::intValue呢?

這裡是調用了Integer的iniValue方法。為什麼可以這樣使用呢?

//錯誤示例int result = Integer::intValue; //正確ToIntFunction<Integer> intFunction = Integer::intValue;

再來看一個例子

ToIntFunction<Integer> intFunction = Integer::valueOf;ToIntFunction<Integer> intFunction2 = Integer::intValue;這兩個都是返回的都是ToIntFunction<Integer>

JAVA8中&34;把函數變成了參數,傳遞到函數裡面

但是&34;為什麼把Car::new轉化成了Supplier<Car>,Integer::valueOf轉化成了ToIntFunction<Integer>呢?

來看Supplier

@FunctionalInterfacepublic interface Supplier<T> { /** * Gets a result. * * @return a result */ T get();}

Supplier有一個get()方法,不需要傳入參數返回T對象。

Car的new方法,默認構造方法,不需要傳入參數,返回Car對象。

說到這裡還不明白的話,看下面這個例子。

public class Car { public static Car generate(){ return new Car(); } public static void main(String[] args) { Supplier<Car> car= Car::generate; }}

Car::generate同樣是返回的是Supplier<Car>,generate沒有參數,返回的是Car對象,剛好跟Supplier符合。

說到這裡相信大概大家明白了,&34;將我們的方法轉化成了對應的函數式接口


舉個例子

ToIntFunction類

@FunctionalInterfacepublic interface ToIntFunction<T> { /** * Applies this function to the given argument. * * @param value the function argument * @return the function result */ int applyAsInt(T value);}

參數是T,返回int對象。如果我們要使用&34;該如何做呢?

public class Car { public static int test(int tst){ return 1; } public static void main(String[] args) { ToIntFunction<Integer> integerToIntFunction = Car::test; }}

我們只要定義一個方法,有一個輸入參數,返回參數是int即可。


講到這裡,我們用Java8將List<Integer>轉化成List<Long>怎麼處理呢?

我們看到stream裡面有一個方法

/** * Returns a stream consisting of the results of applying the given * function to the elements of this stream. * * <p>This is an <a href=&StreamOps&34;package-summary.html34;>non-interfering</a>, * <a href=&Statelessness&34;::&34;::"的地方,我們先觀察函數參數是什麼,需要什麼參數,返回什麼對象。然後找對應的處理的方法即可。

當然,Java 8 函數式接口遠不止這些。

但是用起來了,讓自己的代碼起來就行。



相關焦點

  • java8新特性-Stream與LocalDateTime
    nbsp;&34;, &34;); long count = strings.stream().filter(string -> string.isEmpty()).count();2.java8
  • 《神奇女俠1984》中黛安娜為什麼沒有佩戴「劍」和「盾牌」?
    DC宇宙的最新作品《神奇女俠 1984》日前上映,而這部電影相較於之前的英雄片來說,可說是非常溫和的了──因為電影的製作方有意的避免賜死任何角色。儘管目前的評價褒貶不一,但《神奇女俠 1984》目前的口碑超越了《信條》,還是取得了不錯的票房表現。為什麼電影中沒人死亡?
  • 雀音匠 餘音「夏至」雙動圈耳機圖集
    非常有趣的是,「春紛」耳機使用的是雙動圈+一個超高音動鐵的組合,此次「夏至」耳機明確是使用和「春紛」同款雙動圈單元打造。總感覺這句官方介紹是調音師想要展示實力的意思?「夏至」耳機售價499元,比「春紛」的699元便宜不少。而外觀還是用雀音匠的進口樹脂3D列印,外觀不錯。Soomal將於6月12日發布測評報告。
  • 電視劇「神奇小飛俠」吾王「亂入」!?國產山寨作品回顧
    電視劇「神奇小飛俠」吾王「亂入」!?國產山寨作品回顧 動漫 178動漫頻道整理 ▪ 2015-07-16 12:08:24   近日,我國拍攝的電視劇「神奇小飛俠」
  • 「神奇女俠」蓋爾·加朵,關於女性、人生的20句正能量語錄!
    飾演「神奇女俠」而走紅的蓋爾·加朵近期不止將以《神奇女俠1984》再次登上大銀幕,與艾米·漢莫攜手演出的懸疑大作《尼羅河上的慘案》也即將推出,除此之外她還即將化身新版「埃及豔后」!憑著堅持不懈、永不放棄的精神,蓋爾·加朵就是真實生活中的神奇女俠。現在就讓我們一起細細品味「神奇女俠」蓋爾·加朵關於女性、人生的20句正能量語錄:1、「讓自己環繞在樂觀、鼓舞人心、強大的人們身旁,你就能擁有良好的心境。」
  • 「女友成雙」漫畫發售,官方發布紀念PV
    「女友成雙」漫畫發售,官方發布紀念PV 動漫 178動漫整編 ▪ 2020
  • 沒想到,有一天要趁「雙 11」搶購房子了
    今年天貓「雙 11」購物節最大的不同,在於時間節奏更合理了,10 月 20 號預售,11 月 1 日至 3 日是第一波購買日期;此後用戶可以繼續「補充」購物車,11 月 11 日進行第二波「剁手」。,如果沒有每年雙 11 購物節令人恐怖的高並發流量,像支付寶的餘額寶這樣的產品可能也不一定出的來;沒有過去「雙 11」造成的快遞爆倉,估計也不會有菜鳥及其對快遞行業的強力推動。
  • 「影評」《神奇女俠1984》繼續體會這個世界的美,好嗎?
    面對兩極化的評價,我喜歡「《神奇女俠1984》」的理由比起第一集廣受好評,《神奇女俠1984》的評價出乎意外地兩極,喜歡的人很多,討厭的人也不少,而我自己是屬於前者,所以看了許多討厭這集的人的看法,發現最大的問題就在於對劇情的不滿,除了設定有問題外,說教式的演法更是令人不喜歡。
  • 一臺能「引爆朋友圈」的神奇相機,就這樣被我大卸八塊
    這個周末,氪君的好友超哥來為大家實測一款「神奇」相機,聽說Ta能景色360度無死角全記錄?快來一起看看吧!超哥今天就準備了一個「神奇」的新相機,它不僅能360度無死角地將景色盡收眼底,還能旋轉時空,讓你置身於行星之上?一起來看——話不多說,直接開拍!打開Insta360 ONE R配套的手機app,我們能在「AI創意庫」裡面看到許多有趣的模板。
  • 「雙11」到了,我們整理了一份最值得購買的「品質清單」
    作者:不知不覺,一年一度的「剁手節」又要來了,大家是不是感覺已經被五花八門的促銷信息晃花了眼?為了幫助大家低價買到真正優秀的產品,我們整理了一份「雙 11」期間最值得購買的產品清單。如果大家正在考慮近期買 iPhone 7 / 7 Plus,「雙 11」是個好時候。
  • 「雙 11」到了,我們整理了一份最值得購買的「品質清單」
    不知不覺,一年一度的「剁手節」又要來了,大家是不是感覺已經被五花八門的促銷信息晃花了眼?為了幫助大家低價買到真正優秀的產品,我們整理了一份「雙 11」期間最值得購買的產品清單。如果大家正在考慮近期買 iPhone 7 / 7 Plus,「雙 11」是個好時候。購買連結:京東商城,蘇寧易購
  • 《我的世界》關於java7和java8的選擇科普
    我的世界關於java7和java8的選擇很多小夥伴還不是很了解,今天小編為大家帶來的是我的世界關於java7和java8的選擇科普。
  • 「Animate咖啡池袋4號店」決定與「文豪野犬」合作
    「Animate咖啡池袋4號店」決定與「文豪野犬」合作 動漫 178動漫整編 ▪
  • 微信公眾號測試「問答」功能
    8 月 18 日,微信公眾號灰度測試「問答」功能。公眾號開通後,可以在圖文內容中插入「問答」插件,該功能可以彌補新註冊公眾號沒有留言功能的遺憾。「問答」效果如下圖所示:從圖中可以看到,該插件是直接插入文章內部的,默認只顯示三條主回復,但每條主回復下面又可以顯示多條二級回復。用戶可以對回復點讚、評論。
  • 「雙11」多功能佳明S60高爾夫腕錶!雙11減掉600元!
    雙11期間入手更划算哦,原價:3680元,「48小時」僅售價:3042元,超低折扣價,僅限雙11活動哦!詳情請看圖~戳視頻可了解詳細功能哦~▼下場實拍視頻▼24小時內安排發貨,詳細情況可諮詢商城小秘書(微信號:sz-golftips)。上期回顧:supurNEWLING 遠距離二層球,雙11價:388元/5盒!688元/10盒!擁有柔軟的擊球觸感和超遠球距,助你輕鬆抓鳥!
  • 「Newtype」10月號封面公開
    「Newtype」10月號封面公開 動漫 178動漫整編 ▪ 2020-09
  • 多功能負一屏小米主題「月球星空」鎖屏桌面雙動態
    多功能負一屏小米主題「月球星空」鎖屏桌面雙動態 2020-11-11 22:32
  • 朋友圈「話題標籤」= 全民推廣視頻號?
    「#+文字」,系統會自動生成可點擊的「話題標籤」,用戶點擊後即可跳轉至一個內容聚合頁,該頁面會優先展示視頻號和朋友圈內容;點擊「更多結果」,聚合頁還會展示包括公眾號、表情包、快捷服務(小程序)等內容,整體上類似搜一搜。
  • 公眾號可以搶「熱搜」了!灰度測試的「圖文標籤」可以這麼玩
    公眾號可以搶「熱搜」了!灰度測試的「圖文標籤」可以這麼玩 7 月 2 日,微信給我們發來了一個灰度測試邀請。
  • 微信有「雙封」功能?官方回應闢謠
    最近在網絡上有傳聞說微信開啟了「雙封」功能,在一些微信帳號的暱稱或是個性籤名頁面出現了「舉報雙封」、「已開雙封」等字樣。他們所指的「雙封」功能,就是當用戶開啟該功能後,投訴人和被投訴人都會同時被封號。為了避免對大家產生誤導,微信官微「微信 110」最近對「雙封」功能進行了闢謠。微信表示,官方從未推出過雙封功能,也從來沒有過雙封策略,正常情況下並不存在你舉報了騙子反被封號的可能性。