Java8中的[方法引用]“雙冒號”——走進Java Lambda(四)

    前面的章節我們提及到過雙冒號運算符,雙冒號運算就是Java中的[方法引用],[方法引用]的格式是

類名::方法名

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

例如

表達式:

person -> person.getAge();

可以替換成

Person::getAge

表達式

() -> new HashMap<>();

可以替換成

HashMap::new

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

下面這段代碼,進行的操作是,把List<String>裏面的String全部大寫並返還新的ArrayList<String>,在前面的例子中我們是這麼寫的:

@Test
public void convertTest() {
    List<String> 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<String> collected = new ArrayList<>();
    collected.add("alpha");
    collected.add("beta");
    collected = collected.stream().map(String::toUpperCase).collect(Collectors.toCollection(ArrayList::new));//注意發生的變化
    System.out.println(collected);
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章