前面的(de)章(zhāng)節我們提及到(dào)βφ™過雙冒号運算(suàn)符,雙冒号運算( β suàn)就(jiù)是(shì)Java中的(de)[方法引用γ&(yòng)],[方法引用(yòng)]的(de)格式>是(shì)
類名::方法名
注意是(shì)方法名哦,後面沒有(yǒu)括号“()”哒。為(wèi)啥不>↔₹(bù)要(yào)括号,因為(wèi)這(zhè)樣 ελ的(de)是(shì)式子(zǐ)并不(bù)代表一(yī)定會(hu 'ì)調用(yòng)這(zhè)個(gè)方☆↑™♣法。這(zhè)種式子(zǐ)一(yī)般是(shì)用(yòng)作₹≤★↑(zuò)Lambda表達式,Lambd™Ω ±a有(yǒu)所謂懶加載嘛,不(bù)要(yào)括号就(jiù)是(s₹×↕hì)說(shuō),看(kàn)情況調用(yγ→€÷òng)方法。
例如(rú)
表達式:
person -> person.getAge();
可(kě)以替換成
Person::getAge
表達式
() -> new HashMap<>¶±•;();
可(kě)以替換成
HashMap::new
這(zhè)種[方法引用(yòng)]或者說(shuō)[雙冒号運算(¥↕®☆suàn)]對(duì)應的(de)參數(shù)類型是(sh δαì)Function T表示傳入類型,R表示返回類型。
比如(rú)表達式person -> person.getAg₹¥÷≠e(); 傳入參數(shù)是(shì)person,返£α回值是(shì)person.getAge(),那(n↓≈σà)麽方法引用(yòng)Person::getAge₩$就(jiù)對(duì)應著(zhe)Func§₩☆tion 類型。
下(xià)面這(zhè)段代碼,進行(xíng)的($•de)操作(zuò)是(shì),把List裡(lǐ)面的(de)String →全部大(dà)寫并返還(hái)新的(de)ArrayList,©α≠α在前面的(de)例子(zǐ)中我們是(shì)這(zhè>♥★)麽寫的(de):
@Test
public void convertTest() {
List co≠$¥>llected = new ArrayList<♦₽ ;>();
collect>≤ed.add("alpha");
collected.add("b✘•≈eta");
collected = colle←ε&®cted.stream().map(string -&gδ™t; string.toUpperCase()).collect÷α↓★(Collectors.toList());
System.out.λ↕println(collected);
}
現(xiàn)在也(yě)可(kě)以被替換成下(xià)面的(¥≤de)寫法:
@Test
public void convertT∑∏∞est() {
List collected$≈∏ = new ArrayList<>();σ×™
collected.add("alδ→ ←pha");
collected.add("beta"®£♥);
collected = collectφ↓βed.stream().map(String::toUpper¥★Case).collect(Collectors.toCollecti•★on(ArrayList::new));//注意發生(shēng)的(de)變 ♥化(huà)
System.ouεαt.println(collected);
}
|