how - parse arraylist to array java




make arrayList.toArray() retorna tipos mais específicos (4)

Como isso:

List<String> list = new ArrayList<String>();

String[] a = list.toArray(new String[0]);

Antes do Java6, era recomendado escrever:

String[] a = list.toArray(new String[list.size()]);

porque a implementação interna realocaria um array de tamanho adequado de qualquer forma, então seria melhor fazê-lo antecipadamente. Desde o Java6, o array vazio é o preferido, veja stackoverflow.com/questions/174093

Se sua lista não for digitada adequadamente, será necessário fazer uma conversão antes de chamar o array. Como isso:

    List l = new ArrayList<String>();

    String[] a = ((List<String>)l).toArray(new String[l.size()]);

Então, normalmente ArrayList.toArray() retornaria um tipo de Object[] .... mas supunha que fosse um Arraylist do objeto Custom , como eu faço toArray() para retornar um tipo de Custom[] ao invés de Object[] ?


Ele realmente não precisa retornar o Object[] , por exemplo:

    List<Custom> list = new ArrayList<Custom>();
    list.add(new Custom(1));
    list.add(new Custom(2));

    Custom[] customs = new Custom[list.size()];
    list.toArray(customs);

    for (Custom custom : customs) {
        System.out.println(custom);
    }

Aqui está minha aula Custom : -

public class Custom {
    private int i;

    public Custom(int i) {
        this.i = i;
    }

    @Override
    public String toString() {
        return String.valueOf(i);
    }
}

@SuppressWarnings("unchecked")
    public static <E> E[] arrayListToArray(ArrayList<E> list)
    {
        int s;
        if(list == null || (s = list.size())<1)
            return null;
        E[] temp;
        E typeHelper = list.get(0);

        try
        {
            Object o = Array.newInstance(typeHelper.getClass(), s);
            temp = (E[]) o;

            for (int i = 0; i < list.size(); i++)
                Array.set(temp, i, list.get(i));
        }
        catch (Exception e)
        {return null;}

        return temp;
    }

Amostras:

String[] s = arrayListToArray(stringList);
Long[]   l = arrayListToArray(longList);





arraylist