Самый легкий способ преобразовать набор для выстраивания?

Предположим, что у нас есть a Collection<Foo>. К чему является лучшим (самый короткий в LoC в текущем контексте) способ преобразовать его Foo[]? Любым известным библиотекам разрешают.

UPD: (еще один случай в этом разделе; оставьте комментарии, если Вы думаете, что стоит для создания другого потока для него): Что относительно преобразования Collection<Foo> кому: Bar[] где Bar имеет конструктора с 1 параметром типа Foo т.е. public Bar(Foo foo){ ... } ?

118
задан Roman 20 July 2010 в 20:20
поделиться

4 ответа

Где x - это коллекция:

Foo[] foos = x.toArray(new Foo[x.size()]);
243
ответ дан 24 November 2019 в 01:55
поделиться

Если вы используете его более одного раза или в цикле, вы можете определить константу

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[]{});
10
ответ дан 24 November 2019 в 01:55
поделиться

Вот окончательное решение для случая в разделе обновлений (с помощью Google Collections):

Collections2.transform (fooCollection, new Function<Foo, Bar>() {
    public Bar apply (Foo foo) {
        return new Bar (foo);
    }
}).toArray (new Bar[fooCollection.size()]);

Но ключевой подход здесь был упомянут в ответ doublep (я забыл для toArray метод).

3
ответ дан 24 November 2019 в 01:55
поделиться

Для оригинала смотрите 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);
}    
3
ответ дан 24 November 2019 в 01:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: