极速11选5
   
 
JAVA技術
  當前位置:首頁 > 技術支持 > JAVA技術
Java8中的[方法引用]“雙冒號”與Java Lambda
發布時間:2019-09-29 瀏覽:148次
  
前面的章節我們提及到過雙冒號運算符,雙冒號運算就是Java中的[方法引用],[方法引用]的格式是
類名::方法名

注意是方法名哦,后面沒有括號“()”噠。為啥不要括號,因為這樣的是式子并不代表一定會調用這個方法。這種式子一般是用作Lambda表達式,Lambda有所謂懶加載嘛,不要括號就是說,看情況調用方法。

例如
表達式:
person -> person.getAge();
可以替換成
Person::getAge
表達式
() -> new HashMap<>();
可以替換成
HashMap::new
這種[方法引用]或者說[雙冒號運算]對應的參數類型是Function T表示傳入類型,R表示返回類型。
比如表達式person -> person.getAge(); 傳入參數是person,返回值是person.getAge(),那么方法引用Person::getAge就對應著Function類型。

下面這段代碼,進行的操作是,把List里面的String全部大寫并返還新的ArrayList,在前面的例子中我們是這么寫的:
@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);
}
現在也可以被替換成下面的寫法:
@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));//注意發生的變化
    System.out.println(collected);
}
 
 
    
 
 
版權所有 © 2005-2019 安徽省艾佳信息技術有限公司 极速11选5  皖公網安備 34019202000659號
地址:安徽省合肥市高新區天元路1號留學人員創業園1號樓205 電話:0551-64935878 郵箱:[email protected]