一.格式:

-
引用数组的构造方法的目的是创建一个指定类型的数组对象
-
注:数组也是有构造方法的(在Java底层中,有一个类专门用来描述数组,该类里有数组的构造方法,只不过这个类不是我们写的,是Java写的,当创建数组时就会自动调用对应的构造方法)
二.练习:
需求:
集合中存储一些整数,收集到数组当中
解答:
未使用方法引用前:
package com.itheima.a01myfunction;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.function.IntFunction;
public class FunctionDemo6 {
public static void main(String[] args) {
//1.创建集合
ArrayList<Integer> list=new ArrayList<>();
//2.添加元素
Collections.addAll(list,1,2,3,4,5);
//3.把list集合中的数据收集到数组当中
/*toArray方法空参的情况下,最终的结果的类型是Object型,但这不是我们想要的,
因此我们要指定数组的类型,所以要用带参的toArray方法*/
Integer[] arr = list.stream().toArray(new IntFunction<Integer[]>() { //IntFunction的泛型表示指定类型的数组,此时集合里的数据是Integer型,所以要创建的数组就是Integer型,注:这里是泛型,要用包装类
@Override
public Integer[] apply(int value) {
return new Integer[value]; //注:返回值必须是Integer型,和IntFunction接口的泛型保持一致,不能是int
}
});
//4.打印arr数组
System.out.println(Arrays.toString(arr)); //直接打印arr是打印的arr的地址值,要想看到属性值可以利用Arrays.toString(arr)
}
}
使用引用数组的构造方法改写后:
IntFunction是函数式接口,所以可以在此处使用方法引用改写。
本例中toArray方法里的apply方法的形参是整型,返回值是Integer[],功能是创建一个Integer类型的数组,长度与流中数据的个数一样,并把流里的数据放到创建的这个数组中,
这里要引用数组的构造方法,所以返回值就不要考虑了,只需要引用的方法结束后创建一个Integer型数组的对象即可,这里直接引用Integer类的构造方法就行,因为Integer类的构造方法结束后就会自动创建Integer类对象,
引用数组的构造方法还需要形参是整型,功能是创建一个Integer类型的数组,长度与流中数据的个数一样,并把流里的数据放到创建的这个数组中,该方法在Java中已经有现成的:

细节:创建的数组的类型,需要和流中数据的类型保持一致。
此时流里的数据类型是Integer型,所以创建的数组的类型也必须是Integer型,不能是int型和其他类型。
package com.itheima.a01myfunction;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
public class FunctionDemo6 {
public static void main(String[] args) {
//1.创建集合
ArrayList<Integer> list=new ArrayList<>();
//2.添加元素
Collections.addAll(list,1,2,3,4,5);
//3.把list集合中的数据收集到数组当中
/*toArray(Integer[]::new)理解为创建一个Integer类型的数组,长度与流中数据的个数一样,并把流里的数据放到创建的这个数组中*/
Integer[] arr = list.stream().toArray(Integer[]::new);
//4.打印arr数组
System.out.println(Arrays.toString(arr)); //直接打印arr是打印的arr的地址值,要想看到属性值可以利用Arrays.toString(arr)
}
}
883

被折叠的 条评论
为什么被折叠?



