日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

淺談對Java雙冒號::的理解

瀏覽:165日期:2022-08-30 17:39:12

本文為個人理解,不保證完全正確。官方文檔中將雙冒號的用法分為4類,按照我的個人理解可以分成2類來使用。

官方文檔

官方文檔中將雙冒號的用法分為了以下4類:

用法 舉例 引用靜態方法 ContainingClass::staticMethodName 引用特定對象的實例方法 containingObject::instanceMethodName 引用特定類型的任意對象的實例方法 ContainingType::methodName 引用構造函數 ClassName::new

以下是我的理解

個人理解

雙冒號的作用

在使用雙冒號前我們要先搞清楚一個問題:為什么要使用雙冒號?也就是雙冒號的作用是什么。雙冒號的設計初衷是為了化簡Lambda表達式,不熟悉Lambda表達式的同學可以先了解一下。Lambda表達式的形式有兩種:

包含單獨表達式 :parameters -> an expression

list.forEach(item -> System.out.println(item));

包含代碼塊:parameters -> { expressions }

list.forEach(item -> { int numA = item.getNumA(); int numB = item.getNumB(); System.out.println(numA + numB);});

使用雙冒號可以省略第一種Lambda表達式中的參數部分,即item ->和調用方法的參數這兩部分。

例如:

//不使用雙冒號list.forEach(item -> System.out.println(item));//使用雙冒號list.forEach(System.out::println);

雙冒號的使用條件

使用雙冒號有兩個條件:

條件1條件1為必要條件,必須要滿足這個條件才能使用雙冒號。Lambda表達式內部只有一條表達式(第一種Lambda表達式),并且這個表達式只是調用已經存在的方法,不做其他的操作。

條件2由于雙冒號是為了省略item ->這一部分,所以條件2是需要滿足不需要寫參數item也知道如何使用item的情況。有兩種情況可以滿足這個要求,這就是我將雙冒號的使用分為2類的依據。

情況 舉例 Lambda表達式的參數與調用函數的參數完全一致 list.forEach(item -> System.out.println(item)) 調用的函數是參數item對象的方法且沒有參數 list.stream().map(item -> item.getId())

一些栗子

Lambda表達式的參數與調用函數的參數完全一致時

靜態方法調用

//化簡前list.forEach(item -> System.out.println(item));//化簡后list.forEach(System.out::println);

非靜態方法調用

StringBuilder stringBuilder = new StringBuilder();//化簡前IntStream.range(1, 101).forEach(item -> stringBuilder.append(item));//化簡后IntStream.range(1, 101).forEach(stringBuilder::append);

調用構造方法

官方給出的例子

先定義一個方法,這個方法的作用是將一個集合的內容復制到另一個集合

public <T, SOURCE extends Collection<T>, DEST extends Collection<T>>DEST transferElements(SOURCE sourceCollection, Supplier<DEST> collectionFactory) { DEST result = collectionFactory.get(); result.addAll(sourceCollection); return result;}

調用這個方法

//化簡前Set<Person> rosterSetLambda = transferElements(roster, () -> new HashSet<>());//化簡后Set<Person> rosterSet = transferElements(roster, HashSet::new);

稍微解釋一下:

調用時傳入的Lambda表達式相當于是對Supplier的繼承,并重寫Supplier的get()方法,下面是Supplier的源碼:

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

在transferElements()方法中調用collectionFactory.get()時相當于調用重寫后的方法{return new HashSet<>();}

我自己寫的一個例子

第一個類:

@Datapublic class ModelA { private String id; public ModelA(String id) { this.id = id; } public ModelA() { }}

第二個類

class ClassB { private final List<ModelA> list = new ArrayList<>(); public void add(String string, Function<String, ModelA> function) { list.add(function.apply(string)); }}

測試代碼

ClassB classB = new ClassB();d//化簡前classB.add('ddd', item -> new ModelA(item));//化簡后classB.add('ddd', ModelA::new);

調用的函數是參數item對象的方法且沒有參數時

//化簡前List<String> stringList = list.stream().map(item -> item.getId()).collect(Collectors.toList());//化簡后List<String> stringList = list.stream().map(ModelA::getId).collect(Collectors.toList());

一種特殊情況

除了上述兩種情況可以使用雙冒號化簡Lambda表達式外,還存在一種特殊情況也可以使用雙冒號。當Lambda表達式的參數有兩個(形如(a,b) -> an expression)時,調用a的方法參數為b時,例如:

String[] stringArray = {'Barbara', 'James', 'Mary', 'John'};//化簡前Arrays.sort(stringArray, (a,b) -> a.compareToIgnoreCase(b));//化簡后Arrays.sort(stringArray, String::compareToIgnoreCase);

到此這篇關于淺談對Java雙冒號::的理解的文章就介紹到這了,更多相關Java雙冒號::內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
免费在线欧美黄色| 日韩av有码| 精品欠久久久中文字幕加勒比| 日本伊人午夜精品| 鲁大师成人一区二区三区| 久久网站免费观看| 女生影院久久| 四虎4545www国产精品 | 日韩欧美一区二区三区在线视频| 国产精品九九| 久久久久久久欧美精品| 精品午夜视频| 福利在线免费视频| www.51av欧美视频| 久久久噜噜噜| 不卡av一区二区| 亚洲免费精品| 首页欧美精品中文字幕| 一本综合精品| 日本视频一区二区| 亚洲精品进入| 国产精品亚洲欧美日韩一区在线| 国产区精品区| 国产精品亚洲欧美一级在线| 国产精品久久| 国产粉嫩在线观看| 午夜精品成人av| 欧美日韩中文字幕一区二区三区| 亚洲精品极品少妇16p| 久久亚洲影院| 欧美视频久久| 久久香蕉网站| 欧美午夜精彩| 日韩一区精品| 精品一区视频| 久久精品动漫| 天海翼精品一区二区三区| 国产精品mv在线观看| 国产精品视频一区视频二区| 成人在线免费观看网站| 亚洲一级二级| 日韩影院在线观看| 日本午夜精品一区二区三区电影 | 五月天激情综合网| 欧美专区18| 久久三级福利| 日韩中文字幕一区二区三区| 日韩精品亚洲一区二区三区免费| 国产探花在线精品| 亚洲91久久| 蜜臀a∨国产成人精品| 国产精品久久久久77777丨| 国精品产品一区| 欧美精选一区二区三区| 日本91福利区| 色偷偷偷在线视频播放| 免费人成黄页网站在线一区二区| 国产精品天天看天天狠| 日韩在线视频精品| 石原莉奈在线亚洲二区| 欧美激情五月| 欧美理论视频| 国产精品天堂蜜av在线播放| 不卡在线一区二区| 日韩欧美高清一区二区三区| 日韩欧美字幕| 日韩**一区毛片| 国产欧美日韩一区二区三区在线| 韩国精品主播一区二区在线观看 | 国产精品成人国产| 久久久久99| 欧美日韩xxxx| 欧美~级网站不卡| 国产欧美日韩一区二区三区四区| 欧美日韩精品在线一区| 亚洲另类av| 色婷婷亚洲mv天堂mv在影片| 免费黄网站欧美| 中文在线а√在线8| 日本亚洲三级在线| 性欧美xxxx免费岛国不卡电影| 久久国产精品色av免费看| 欧美精品一线| 欧美激情另类| 国产调教一区二区三区| 精品国产a一区二区三区v免费| 偷拍亚洲精品| 日韩国产在线一| 中文字幕av一区二区三区人| 欧美在线看片| 成人亚洲一区二区| 亚洲精品少妇| 首页欧美精品中文字幕| 久久久久久黄| 久久久久美女| 精品视频在线你懂得| 伊人国产精品| 欧美日韩国产亚洲一区| 日韩免费久久| 成人在线超碰| 国产亚洲精aa在线看| 亚洲午夜国产成人| 午夜久久久久| 欧美日韩精品一本二本三本 | 午夜在线精品偷拍| 免费高潮视频95在线观看网站| 国产精品丝袜在线播放| 亚洲精品乱码日韩| 在线亚洲成人| 久久久蜜桃一区二区人| 色综合五月天| 精品免费视频| 国产精品毛片aⅴ一区二区三区| 久热精品在线| 欧美不卡在线| 日本а中文在线天堂| 国产在线一区不卡| 精品99在线| 麻豆久久一区| 欧美日一区二区三区在线观看国产免| 国产精品视区| 亚洲一区日本| 性欧美长视频| 国产亚洲永久域名| 丝袜诱惑制服诱惑色一区在线观看| 99视频精品全部免费在线视频| 高清久久精品| 给我免费播放日韩视频| yellow在线观看网址| 久久av电影| 久久免费精品| 精品高清久久| 91欧美国产| 国产精品精品国产一区二区| 久久99精品久久久野外观看| 99视频+国产日韩欧美| 中文字幕一区二区三区日韩精品| 91日韩在线| 最新中文字幕在线播放| 久久精品理论片| 久久字幕精品一区| 日韩va欧美va亚洲va久久| 九一成人免费视频| 欧美日韩一区二区三区在线电影| 狠狠爱成人网| 免费不卡中文字幕在线| 欧美亚洲国产精品久久| a天堂资源在线| 蜜桃av在线播放| 福利精品一区| 99久久夜色精品国产亚洲狼 | 亚洲视频国产| 日韩欧美中文在线观看| 国产日韩欧美高清免费| 老司机精品视频网| 成年男女免费视频网站不卡| 丝袜av一区| 一区视频在线| 亚洲精品一区二区在线播放∴| 日韩高清在线不卡| 美女毛片一区二区三区四区最新中文字幕亚洲 | 日韩精品第一| 97精品国产99久久久久久免费| 国产福利一区二区精品秒拍| 四虎国产精品免费观看| 亚洲啊v在线| 日韩亚洲国产欧美| 亚洲ww精品| 你懂的亚洲视频| 中文字幕在线免费观看视频| 亚洲一级网站| 日本亚洲最大的色成网站www| 国产精品亚洲欧美日韩一区在线| 久久久久伊人| 欧美日韩三区| 日韩和欧美一区二区三区| 精品99在线| 国产亚洲精品v| 国产精品欧美在线观看| 高清av一区| 爽好多水快深点欧美视频| 欧美午夜三级| 亚洲成人不卡| 蘑菇福利视频一区播放| 国产三级一区| 久久久亚洲一区| 亚洲青青久久| 欧美国产美女| 亚洲一区观看| 精品三级在线| 日av在线不卡| 久久中文在线| 亚洲欧美日韩精品一区二区| 日本午夜精品一区二区三区电影| 欧产日产国产精品视频| 老牛国产精品一区的观看方式| 久久久久九九精品影院| 午夜久久tv| 国产成年精品| 日韩中文欧美在线|