Você poderia criar métodos auxiliares que converteriam uma lista (array) do tipo T
em uma lista (array) do tipo U
usando a map
operação on stream
.
//for lists
public static <T, U> List<U> convertList(List<T> from, Function<T, U> func) {
return from.stream().map(func).collect(Collectors.toList());
}
//for arrays
public static <T, U> U[] convertArray(T[] from,
Function<T, U> func,
IntFunction<U[]> generator) {
return Arrays.stream(from).map(func).toArray(generator);
}
E use-o assim:
//for lists
List<String> stringList = Arrays.asList("1","2","3");
List<Integer> integerList = convertList(stringList, s -> Integer.parseInt(s));
//for arrays
String[] stringArr = {"1","2","3"};
Double[] doubleArr = convertArray(stringArr, Double::parseDouble, Double[]::new);
Observe que
s -> Integer.parseInt(s)
pode ser substituído por
Integer::parseInt
(consulte as
referências de método )
Lists.transform()
.fonte
Os métodos auxiliares da resposta aceita não são necessários. Os fluxos podem ser usados com lambdas ou geralmente encurtados usando referências de método . Streams permitem operações funcionais.
map()
converte os elementos e /collect(...)
outoArray()
envolve o fluxo de volta em uma matriz ou coleção.A palestra (vídeo) de Venkat Subramaniam explica isso melhor do que eu.
1 converter
List<String>
paraList<Integer>
2 Converter
List<String>
paraint[]
3 Converter
String[]
paraList<Integer>
4 converter
String[]
paraint[]
5 converter
String[]
paraList<Double>
6 (bônus) Converter
int[]
paraString[]
Muitas outras variações são possíveis, é claro.
Veja também a versão Ideone desses exemplos . Pode clicar em fork e, em seguida, executar para executar no navegador.
fonte
EDIT: Como apontado nos comentários, esta é uma versão muito mais simples:
Arrays.stream(stringArray).mapToInt(Integer::parseInt).toArray()
Desta forma, podemos pular toda a conversão de e para uma lista.Eu encontrei outra solução de uma linha, mas ainda é muito lenta (leva cerca de 100 vezes mais do que um ciclo for - testado em uma matriz de 6.000 zeros)
O que isso faz:
fonte
Arrays.stream(stringArray).mapToInt(Integer::parseInt).toArray()
Para a lista:
Para Array:
fonte
Você também pode usar,
fonte
Não o encontrei nas respostas anteriores, portanto, com Java 8 e streams:
Converter
String[]
paraInteger[]
:fonte
Além disso - controle quando a matriz de string não tem elementos:
fonte
Usei maptoInt () com operação Lambda para converter string em inteiro
fonte
Arrays.toString (int []) funciona para mim.
fonte