如何从存储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
相关产品推荐
相关产品推荐

