You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从存储B类对象的List通过getA方法生成A类型数组?

问题描述

我有一个存储B类对象的List/ArrayList,B类包含一个返回A类对象的getA()方法,代码示例如下:

class A
{
    ...
}

class B
{
    ...
    private A aObj;
    public A getA()
    {
        return aObj;
    }
}

List<B> listB = new ArrayList<>();

现在希望基于该List创建A类数组,尝试使用A[] = listB.toArray(???);是否可行?有没有简便的实现方式,还是必须自行编写遍历List创建数组的方法?

解答

直接使用listB.toArray(???);不可行,因为listB中存储的是B类型对象,toArray方法只能直接将集合转换为对应元素类型的数组(也就是B[]),无法直接通过它将B对象映射为A对象并生成A[]数组。

不需要手动编写遍历代码,Java 8及以上版本提供的Stream API就能快速实现:

// 简洁写法:利用方法引用和数组构造引用
A[] aArray = listB.stream()
                  .map(B::getA)
                  .toArray(A[]::new);

// 等价的显式写法
A[] aArray = listB.stream()
                  .map(b -> b.getA())
                  .toArray(size -> new A[size]);

如果是Java 8之前的版本,才需要手动遍历集合创建数组:

A[] aArray = new A[listB.size()];
for (int i = 0; i < listB.size(); i++) {
    aArray[i] = listB.get(i).getA();
}

内容的提问来源于stack exchange,提问作者Traber Hong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 07:14:55