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>,在前面的例子中我們是這么寫的:

[java]  view plain  copy
 
  1. @Test  
  2. public void convertTest() {  
  3.     List<String> collected = new ArrayList<>();  
  4.     collected.add("alpha");  
  5.     collected.add("beta");  
  6.     collected = collected.stream().map(string -> string.toUpperCase()).collect(Collectors.toList());  
  7.     System.out.println(collected);  
  8. }  

現在也可以被替換成下面的寫法:

 

[java]  view plain  copy
 
  1. @Test  
  2. public void convertTest() {  
  3.     List<String> collected = new ArrayList<>();  
  4.     collected.add("alpha");  
  5.     collected.add("beta");  
  6.     collected = collected.stream().map(String::toUpperCase).collect(Collectors.toCollection(ArrayList::new));//注意發生的變化  
  7.     System.out.println(collected);  
  8. }  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM