1.構造器引用
構造器引用與方法引用的區別在於:
方法引用:方法引用使用操作符“::”將方法名和對象或者類的名字分隔開來。
構造器引用就是多了一個:方法名爲new。
(1)假如說有一個字符串列表,可以將它轉換成一個Person對象數組。
ArrayList<String> names = aaa; // 字符串列表
Stream<Person> people = names.stream().map(Person::new); // person的引用
List<Person> stream = stream.collect(Collectors.toLists()); // person對象數組
以上代碼中重點是:map方法會爲各個列表元素調用Person(String)構造器。
(2)可以用數組類型建立構造器引用。
例如:int[]::new
是一個構造器引用,等價於lambda表達式x->new int[x]
,Java中有一個限制,無法構造泛型類型T的數組。
(3)假設我們需要一個Person對象數組。
// 01.stream有一個toArray方法可以返回數組
// 02.流庫stream利用構造器引用解決了這個問題,我們可以把Person[]:new傳入toArray方法中。
// 03.toArray方法調用這個構造器來得到一個正確類型的數組,然後填充這個數組並返回。
Person[] people = stream.toArray(Person[]::new);