将集合转换为数组最简单的方法?
假设我们有一个Collection<Foo> 。 什么是最好的(在当前的情况下最短的LoC)的方式来将其转换为Foo[] ? 任何知名的图书馆都是允许的。 
  UPD:(在本节中还有一个例子;如果你觉得值得为它创build另一个线程,请留下评论):如何将Collection<Foo>转换为Bar[] ,其中Bar具有1个参数types为Foo构造函数ie public Bar(Foo foo){ ... } ? 
 其中x是集合: 
 Foo[] foos = x.toArray(new Foo[x.size()]); 
使用Java 8的更新问题的替代解决scheme:
 Bar[] result = foos.stream() .map(x -> new Bar(x)) .toArray(size -> new Bar[size]); 
如果多次使用或循环使用,可以定义一个常量
 public static final Foo[] FOO = new Foo[]{}; 
并做这样的转换
 Foo[] foos = fooCollection.toArray(FOO); 
  toArray方法将使用空数组来确定目标数组的正确types并为您创build一个新数组。 
这是我的更新build议:
 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[]{}); 
以下是更新部分的案例的最终解决scheme(在Googlecollections集的帮助下):
 Collections2.transform (fooCollection, new Function<Foo, Bar>() { public Bar apply (Foo foo) { return new Bar (foo); } }).toArray (new Bar[fooCollection.size()]); 
 但是,这里的关键方法是在doublep的答案中提到的 (我忘记了toArray方法)。 
对于原来的看doublep的回答:
 Foo[] a = x.toArray(new Foo[x.size()]); 
至于更新:
 int i = 0; Bar[] bars = new Bar[fooCollection.size()]; for( Foo foo : fooCollection ) { // where fooCollection is Collection<Foo> bars[i++] = new Bar(foo); }