首页 > 技术交流 > 【有书共读】Java攻略 读书笔记04

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

头像
小犀利
编辑于 2018-11-09 13:55:15
回复0 | 赞 0 | 浏览147

可变参数构造函数

首先为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调用构造函数。同样,由上下文决定调用哪个构造函数。在处理流时,构造函数引用可以提供很大的灵活性。

0条回帖

回帖
加载中...

近期热帖

热门推荐

扫一扫,把题目装进口袋

牛客网,程序员必备求职神器

扫描二维码,进入QQ群

扫描二维码,关注牛客网公众号

  • 公司地址:北京市朝阳区大屯路东金泉时代3-808北京牛客科技有限公司
  • 联系方式:010-60728802(电话) admin@nowcoder.com
  • 牛客科技©2018 All rights reserved
  • 京ICP备14055008号-4
  • 京公网安备 11010502036488号