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);