日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Jdk1.8新特性(三)——方法引用::

發(fā)布時(shí)間:2024/4/14 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Jdk1.8新特性(三)——方法引用:: 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Lambda表達(dá)式可以用來創(chuàng)建匿名方法,有時(shí)候使用lambda表達(dá)式僅僅是調(diào)用一個(gè)已存在的方法:

Arrays.sort(stringsArray,(s1,s2)->s1.compareToIgnoreCase(s2));

在java8中,可以直接通過方法引用的來簡寫lambda表達(dá)式中已經(jīng)存在的方法:

Arrays.sort(stringsArray,String::compareToIgnoreCase);

這種特性就是方法引用。

方法引用是一種更簡潔易懂的lambda表達(dá)式,操作符是雙冒號(hào)::,被用來直接訪問類或者實(shí)例已經(jīng)存在的方法或構(gòu)造方法。方法引用提供了一種引用而不執(zhí)行的方式,它需要由兼容的函數(shù)式接口構(gòu)成的目標(biāo)上下文。計(jì)算時(shí),方法引用會(huì)創(chuàng)建函數(shù)式接口的一個(gè)實(shí)例。

在Java 8中,我們會(huì)使用Lambda表達(dá)式創(chuàng)建匿名方法,但是有時(shí)候,我們的Lambda表達(dá)式可能僅僅調(diào)用一個(gè)已存在的方法,而不做任何其它事,對(duì)于這種情況,通過一個(gè)方法名字來引用這個(gè)已存在的方法會(huì)更加清晰,Java 8的方法引用也允許我們這樣做。

示例:

定義一個(gè)Person實(shí)體類

實(shí)現(xiàn):已知一個(gè)person數(shù)組,通過生日進(jìn)行排序,排序規(guī)則為:按照年齡從大到小排列

  • 使用Arrays的sort方法:
    public static void sort(T[] a, Comparator<? super T> c)
package com.example.jdknewuse;import org.junit.Test; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Comparator; import static org.junit.Assert.*;/*** 實(shí)現(xiàn):已知一個(gè)person數(shù)組,通過生日進(jìn)行排序,排序規(guī)則為:按照年齡從大到小排列* 使用Arrays的sort方法:* public static <T> void sort(T[] a, Comparator<? super T> c)* Created by liumengbing on 2019/02/19 10:02.*/ public class PersonTest {@Testpublic void personTest() throws Exception{SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");Person[] personArray = new Person[]{new Person(sdf.parse("20050901"),"tom"),new Person(sdf.parse("20010901"),"mary"),new Person(sdf.parse("20060901"),"jack"),new Person(sdf.parse("20020901"),"nick"),new Person(sdf.parse("20040901"),"sarah")};//方法一:使用匿名內(nèi)部類Arrays.sort(personArray, new Comparator<Person>() {@Overridepublic int compare(Person o1, Person o2) {return o1.getBirthday().compareTo(o2.getBirthday());}});System.out.print(Arrays.asList(personArray));//[mary, nick, sarah, tom, jack]//方法二:因?yàn)镃omparator接口是一個(gè)函數(shù)式接口,所以我們可以使用lambda表達(dá)式(未調(diào)用已存在的方法)Arrays.sort(personArray,(o1,o2)->{return o1.getBirthday().compareTo(o2.getBirthday());});System.out.print(Arrays.asList(personArray));//[mary, nick, sarah, tom, jack]//方法三:使用lambda表達(dá)式(使用已存在的compareByAge方法)Arrays.sort(personArray,(o1,o2)->Person.compareByAge(o1,o2));System.out.print(Arrays.asList(personArray));//[mary, nick, sarah, tom, jack]//方法四:因?yàn)檫@個(gè)Lambda表達(dá)式調(diào)用了一個(gè)已存在的方法,因此,我們可以直接使用方法引用來替代這個(gè)Lambda表達(dá)式Arrays.sort(personArray,Person::compareByAge);System.out.print(Arrays.asList(personArray));//[mary, nick, sarah, tom, jack] } }

注意:方法引用Person::compareByAge在語義上與lambda表達(dá)式(o1,o2)->Person.compareByAge(o1,o2)是等同的。

總結(jié):

方法引用的標(biāo)準(zhǔn)形式是:類名::方法名。(注意:只需要寫方法名,不需要寫括號(hào))有以下四種形式的方法引用:


四種形式方法引用的具體用法示例請(qǐng)參看以下資料:
Java8之方法引用

總結(jié)

以上是生活随笔為你收集整理的Jdk1.8新特性(三)——方法引用::的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。