问题

假设我们有aCollection<Foo>。什么是最好的(在当前背景下最短的LoC)方式将其转换为Foo[]?允许任何已知的图书馆。

UPD:(一个在此区域的详细情况;发表评论,如果你认为这是值得创建另一个线程它):约transformingCollection<Foo>toBar[]whereBarhas与typeFooi.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[]{});

原文链接