JAVA技術
  當前位置:首頁 > 技術支持 > JAVA技術
Java8中的(de)[方法引用(yòng)]“雙冒号”與Java Lambda
發布時(shí)間:2019-09-29 浏覽:3170次
  
前面的(de)章(zhāng)節我們提及到過雙冒号運算(suàn)符,雙冒号運算(suàn)就是Java中的(de)[方法引用(yòng)],[方法引用(yòng)]的(de)格式是
類名::方法名

注意是方法名哦,後面沒有括号“()”哒。爲啥不要括号,因爲這(zhè)樣的(de)是式子并不代表一定會調用(yòng)這(zhè)個(gè)方法。這(zhè)種式子一般是用(yòng)作Lambda表達式,Lambda有所謂懶加載嘛,不要括号就是說,看情況調用(yòng)方法。

例如
表達式:
person -> person.getAge();
可(kě)以替換成
Person::getAge
表達式
() -> new HashMap<>();
可(kě)以替換成
HashMap::new
這(zhè)種[方法引用(yòng)]或者說[雙冒号運算(suàn)]對(duì)應的(de)參數類型是Function T表示傳入類型,R表示返回類型。
比如表達式person -> person.getAge(); 傳入參數是person,返回值是person.getAge(),那麽方法引用(yòng)Person::getAge就對(duì)應著(zhe)Function類型。

下(xià)面這(zhè)段代碼,進行的(de)操作是,把List裏面的(de)String全部大(dà)寫并返還(hái)新的(de)ArrayList,在前面的(de)例子中我們是這(zhè)麽寫的(de):
@Test
public void convertTest() {
    List collected = new ArrayList<>();
    collected.add("alpha");
    collected.add("beta");
    collected = collected.stream().map(string -> string.toUpperCase()).collect(Collectors.toList());
    System.out.println(collected);
}
現在也(yě)可(kě)以被替換成下(xià)面的(de)寫法:
@Test
public void convertTest() {
    List collected = new ArrayList<>();
    collected.add("alpha");
    collected.add("beta");
    collected = collected.stream().map(String::toUpperCase).collect(Collectors.toCollection(ArrayList::new));//注意發生的(de)變化(huà)
    System.out.println(collected);
}
 
 
    
 
 
版權所有 © 2005-2024 安徽問法信息技術有限公司  
地址:安徽省合肥市蜀山區(qū)望江西路69号西湖國際廣場(chǎng) 電話(huà):0551-64935878 郵箱:admin@ajsoft.cn