问题
假设我们有aCollection<Foo>
。什么是最好的(在当前背景下最短的LoC)方式将其转换为Foo[]
?允许任何已知的图书馆。
UPD:(一个在此区域的详细情况;发表评论,如果你认为这是值得创建另一个线程它):约transformingCollection<Foo>
toBar[]
whereBar
has与typeFoo
i.e.public Bar(Foo foo){ ... }
1个参数的构造函数是什么?
#1 热门回答(223 赞)
Wherex
是该集合:
Foo[] foos = x.toArray(new Foo[x.size()]);
#2 热门回答(32 赞)
使用Java 8更新问题的替代解决方案:
Bar[] result = foos.stream()
.map(x -> new Bar(x))
.toArray(size -> new Bar[size]);
#3 热门回答(10 赞)
如果你多次使用它或在循环中使用它,你可以定义一个常量
public static final Foo[] FOO = new Foo[]{};
并进行转换
Foo[] foos = fooCollection.toArray(FOO);
toArray
方法将采用空数组来确定目标数组的正确类型,并为你创建一个新数组。
这是我的更新建议:
Collection<Foo> foos = new ArrayList<Foo>();
Collection<Bar> temp = new ArrayList<Bar>();
for (Foo foo:foos)
temp.add(new Bar(foo));
Bar[] bars = temp.toArray(new Bar[]{});