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

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

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

瀏覽:168日期: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久久,三上悠亚国产精品一区二区三区
国产情侣久久| 肉色欧美久久久久久久免费看 | 国产成人77亚洲精品www| 亚洲尤物在线| 99亚洲视频| 亚洲在线一区| 视频一区二区三区在线| 美女尤物久久精品| 亚洲一区二区三区久久久| 在线精品亚洲| 日本国产亚洲| 欧美国产日本| 中文一区一区三区高中清不卡免费| 久久久久久久欧美精品| 精品中文一区| 国产日韩专区| 国精品一区二区| 国产韩日影视精品| 国产综合精品| 国产在线观看www| 婷婷视频一区二区三区| 久久久久亚洲| 欧美91精品| 四虎成人av| 久久久国产精品一区二区中文| 免费视频一区三区| 亚洲三级网站| 国产激情精品一区二区三区| 久久女人天堂| 日韩成人免费| 日本精品影院| 亚洲综合电影一区二区三区| 亚洲2区在线| 精品视频久久| 亚洲激情中文在线| 日本aⅴ精品一区二区三区| 精品视频在线你懂得| 免费观看久久av| 久久国产日韩欧美精品| 日本免费一区二区三区四区| 亚洲图片久久| 亚洲一区二区成人| 每日更新成人在线视频| 亚洲另类黄色| 国产欧美三级| 国产激情在线播放| 1024精品久久久久久久久| 亚洲综合激情在线| 高清在线一区| 在线国产一区二区| 国产日韩免费| 伊人精品一区| 国产日韩免费| 日韩一级网站| 麻豆精品蜜桃视频网站| 婷婷色综合网| 国产精品videossex久久发布| 亚洲第一区色| 国产精品videosex极品| 91九色精品国产一区二区| 久久精品xxxxx| 欧美日韩四区| 成人精品动漫一区二区三区| 最新国产精品久久久| 日韩高清不卡| 国产九九精品| 丝袜美腿一区二区三区| 亚洲美女久久精品| 欧美伊人影院| 国产精品毛片在线| 黑人精品一区| 欧美欧美黄在线二区| 激情91久久| 成人在线免费观看91| 一区二区精品| 亚洲福利专区| 九九99久久精品在免费线bt| 亚洲最新av| 亚洲成av人片一区二区密柚| 国产精品videossex久久发布| 在线视频亚洲欧美中文| 啪啪国产精品| 国产一区二区三区四区大秀| 综合精品一区| 国产91在线精品| 久久精品xxxxx| 免费人成在线不卡| 欧美性感美女一区二区| 国产91在线播放精品| 日韩不卡一区二区三区| 欧美日韩日本国产亚洲在线| 日韩欧美一区免费| 国产精品v一区二区三区| 亚洲精品美女91| 不卡中文一二三区| 视频小说一区二区| 福利精品在线| 美女视频黄免费的久久| 奇米狠狠一区二区三区| 亚洲一区二区三区四区五区午夜| 日韩网站中文字幕| 中文字幕人成乱码在线观看 | 日韩精品亚洲aⅴ在线影院| 蜜桃一区二区三区| 激情久久五月| 91精品亚洲| 欧美成人基地| 日韩网站中文字幕| 欧美13videosex性极品| 福利一区二区三区视频在线观看| 美腿丝袜亚洲三区| 国产精品自拍区| 婷婷综合一区| 亚洲区国产区| 美国欧美日韩国产在线播放| 国产精品免费看| 91高清一区| 不卡一区综合视频| 国产精品免费看| 免费在线观看精品| 日本不卡一区二区| 青青青国产精品| 日韩国产欧美一区二区三区| 亚洲精品乱码日韩| 日韩av黄色在线| 国产欧美日韩亚洲一区二区三区| 欧美日韩中文| 美女国产一区二区三区| 国产一区2区| 成人在线免费观看网站| 91亚洲国产高清| 日韩一区自拍| 国产99久久| 欧美日韩视频| 一区二区精彩视频| 国产美女视频一区二区| 欧美1区二区| 欧美天堂视频| 欧美在线网站| 日韩在线卡一卡二| 欧美亚洲网站| 国际精品欧美精品| 久久国产欧美| 鲁大师成人一区二区三区 | 国产精品2区| 精品视频自拍| 中文字幕系列一区| 国产视频一区欧美| 日韩在线黄色| 国产精品久久久久77777丨| 久久久精品国产**网站| 蜜臀久久精品| 午夜在线精品偷拍| 69堂精品视频在线播放| 久久这里只有| 激情综合激情| 中文字幕亚洲影视| 国产日韩中文在线中文字幕| 岛国精品一区| 1024精品久久久久久久久| 亚洲最新av| 久久精品女人| 尤物tv在线精品| 日韩国产欧美在线播放| 日本久久黄色| 久久夜色精品| 美女视频黄免费的久久| 999久久久精品国产| 一区二区日韩免费看| 精品国产一区二区三区性色av| 99精品在线免费在线观看| 色综合视频一区二区三区日韩 | 日韩在线一二三区| 国产亚洲一区二区三区啪| 风间由美中文字幕在线看视频国产欧美| 国产麻豆久久| 婷婷精品久久久久久久久久不卡| 麻豆成人在线观看| 久久视频精品| 日欧美一区二区| 日韩理论视频| 日韩在线观看中文字幕| 日韩久久视频| 日韩精品91亚洲二区在线观看| 国产成人精品三级高清久久91| 午夜在线一区| 国产999精品在线观看| 亚洲自拍另类| 国产精品伦理久久久久久| 丝袜亚洲另类欧美| 成人一二三区| 日韩成人在线看| 香蕉久久精品| 国产午夜精品一区在线观看| 久久裸体视频| 国产欧美激情| 午夜在线视频一区二区区别| 韩国久久久久久| 国产精品一卡| 热久久国产精品|