【有书共读】Java攻略 读书笔记04

可变参数构造函数

首先为Person类加入一个可变参数构造函数

public class Person {        private String name;           public Person(String... name){            this.name = Arrays.stream(names)             
        .collect(Collectors.joining(" "));     
    }        public String getName() {            return name;     
    }        public void setName(String name) {           this.name = name;     
    } } 

如何调用这个构造函数呢?

方案:利用String类定义的split方法,传入一个定界符并返回一个String数组。

String[] split(String delimiter)
//将列表中的每个字符串拆分为单个单词,并调用可变参数构造函数      names.stream() //创建字符串流       .map(name -> name.split(" "))  //映射到字符串数组流       .map(Person::new) //映射到Person流       .collect(Collectors.toList());//收集到Person列表  System.out.println("Varargs ctor,names=" + Arrays.asList(names));

在上述例子中,map方法的上下文包含了Person::new构造函数引用,它是一个字符串数组流,因此将调用可变参数构造函数

数组

构造函数引用也可以和数组一起使用。如果希望采用Person实例的数组(Person[])而非列表,可以使用Stream接口定义的toArray方法,它的签名是:

<A> A[] toArray(IntFunction<A[]> generator)

toArray方法采用A表示返回数组的泛型类型。数组包含流的元素,由generator函数创建。

Person[] people = names.stream()     
    .map(Person::new) //Person的构造函数引用     
    .toArray(Person[]::new); //Person数组的构造函数引用

toArray方法参数创建了一个大小合适的Person引用数组,并采用经过实例化的Person实例进行填充

构造函数引用其实是方法引用的别称,通过关键字new调用构造函数。同样,由上下文决定调用哪个构造函数。在处理流时,构造函数引用可以提供很大的灵活性。

#Java##读书笔记##笔记#
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务