2.6.引用数组的构造方法

一.格式:

  • 引用数组的构造方法的目的是创建一个指定类型的数组对象

  • 注:数组也是有构造方法的(在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)
    }
}

7-2 jmu-Java-03面向对象基础-05-覆盖 分数 10 作者 郑如滨 单位 集美大学 Java每个对象都继承自Object,都有equals、toString等方法。 现在需要定义PersonOverride类并覆盖其toString与equals方法。 1. 新建PersonOverride类 a. 属性:String name、int age、boolean gender,所有的变量必须为私有(private)。 b. 有参构造方法,参数为name, age, gender c. 无参构造方法,使用this(name, age,gender)调用有参构造方法。参数值分别为"default",1,true d.toString()方法返回格式为:name-age-gender e. equals方法需比较name、age、gender,这三者内容都相同,才返回true. 2. main方法 2.1 输入n1,使用无参构造方法创建n1个对象,放入数组persons1。 2.2 输入n2,然后指定name age gender。每创建一个对象都使用equals方法比较该对象是否已经在数组中存在,如果不存在,才将该对象放入数组persons22.3 输出persons1数组中的所有对象 2.4 输出persons2数组中的所有对象 2.5 输出persons2中实际包含的对象的数量 2.5 使用System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));输出PersonOverride的所有构造方法。 提示:使用ArrayList代替数组大幅复简化代码,请尝试重构你的代码。 输入样例: 1 3 zhang 10 true zhang 10 true zhang 10 false 输出样例: default-1-true zhang-10-true zhang-10-false 2 [public PersonOverride(), public PersonOverride(java.lang.String,int,boolean)] 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB 栈限制
最新发布
12-04
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值