Uma vez que este é , na verdade, não é uma lista de strings, a maneira mais fácil é fazer um loop sobre ele e converter cada item em uma nova lista de seqüências de si mesmo:
Eu gosto de como os valores nulos são preservados nesta implementação.
4
Se você usar String.valueOf(object), você não terá que fazer a object != null ? object.toString() : nullcoisa
certa
2
@Tomas: adicionaria uma string com valor em "null"vez do literal null. Depende ainda das exigências de negócios se isso é desejável ou não. Para mim, não teria sido aceitável, já que introduz um bug potencialmente importante.
BalusC de
1
@Tomas: "null"não é null. O nulltem um significado especial em Java. Não faz sentido ser forçado a fazer isso if (item.equals("null"))ao verificar isso posteriormente.
BalusC
1
@Tomas: você está apenas derrotando a forte natureza de digitação do Java dessa forma. Mas, como disse, depende dos requisitos de negócios se isso é desejável. Para mim, isso é simplesmente inaceitável. Faça o que quiser e o tempo ensinará :)
BalusC 28/11/12
18
Não é seguro fazer isso!
Imagine se você tivesse:
ArrayList<Object> list =newArrayList<Object>();
list.add(newEmployee("Jonh"));
list.add(newCar("BMW","M3"));
list.add(newChocolate("Twix"));
Não faria sentido converter a lista desses objetos em qualquer tipo.
A menos que eles tenham o Object#toString()método substituído. No entanto, toda a conversão de tipo de X em String para outros fins que não a apresentação humana realmente não faz muito sentido.
BalusC
13
Se você quiser fazer da maneira suja, tente fazer isso.
Com Java Generics obtém uma lista de X e retorna uma lista de T que estende ou implementa X, Sweet!
// the cast is is actually checked via the method API@SuppressWarnings("unchecked")publicstatic<T extends X, X>ArrayList<T> convertToClazz(ArrayList<X> from,Class<X> inClazz,Class<T> outClazz){ArrayList<T> to =newArrayList<T>();for(X data : from){
to.add((T) data);}return to;}
Respostas:
Uma vez que este é , na verdade, não é uma lista de strings, a maneira mais fácil é fazer um loop sobre ele e converter cada item em uma nova lista de seqüências de si mesmo:
Ou quando você ainda não está no Java 8:
Ou quando você ainda não está no Java 7:
Observe que você deve declarar em relação à interface (
java.util.List
neste caso), não à implementação.fonte
String.valueOf(object)
, você não terá que fazer aobject != null ? object.toString() : null
coisa"null"
vez do literalnull
. Depende ainda das exigências de negócios se isso é desejável ou não. Para mim, não teria sido aceitável, já que introduz um bug potencialmente importante."null"
não énull
. Onull
tem um significado especial em Java. Não faz sentido ser forçado a fazer issoif (item.equals("null"))
ao verificar isso posteriormente.Não é seguro fazer isso!
Imagine se você tivesse:
Não faria sentido converter a lista desses objetos em qualquer tipo.
fonte
Object#toString()
método substituído. No entanto, toda a conversão de tipo de X em String para outros fins que não a apresentação humana realmente não faz muito sentido.Se você quiser fazer da maneira suja, tente fazer isso.
Vantagem: aqui você economiza tempo ao não iterar todos os objetos.
Desvantagem: pode causar um buraco no pé.
fonte
Usando goiaba :
fonte
Usando Java 8, você pode fazer:
fonte
Você pode usar um caractere curinga para fazer isso da seguinte forma
fonte
Aqui está outra alternativa usando goiaba
fonte
Seu código
ArrayList<String> list2 = (String)list;
não compila porquelist2
não é do tipoString
. Mas esse não é o único problema.fonte
Usando Java 8 lambda:
fonte
Com Java Generics obtém uma lista de X e retorna uma lista de T que estende ou implementa X, Sweet!
fonte
Uma solução simples:
Observação: isso funciona quando a lista contém todos os elementos do tipo de dados String.
fonte