Można utworzyć metody pomocnicze, które konwertują listę (tablicę) typu T
na listę (tablicę) typu U
przy użyciu map
operacji 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);
}
I użyj tego w ten sposób:
//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);
Należy pamiętać, że
s -> Integer.parseInt(s)
można je zastąpić
Integer::parseInt
(patrz
Odnośniki do metod )
Lists.transform()
.źródło
Metody pomocnicze z zaakceptowanej odpowiedzi nie są potrzebne. Strumienie mogą być używane z lambdami lub zwykle skracane za pomocą odniesień do metod . Strumienie umożliwiają działanie funkcjonalne.
map()
konwertuje elementy i /collect(...)
lubtoArray()
zawija strumień z powrotem w tablicę lub kolekcję.Przemówienie Venkata Subramaniama (wideo) wyjaśnia to lepiej niż ja.
1 Konwertuj
List<String>
naList<Integer>
2 Konwertuj
List<String>
naint[]
3 Konwertuj
String[]
naList<Integer>
4 Konwertuj
String[]
naint[]
5 Konwertuj
String[]
naList<Double>
6 (bonus) Zamień
int[]
naString[]
Oczywiście możliwych jest dużo więcej wariacji.
Zobacz także wersję Ideone tych przykładów . Może kliknąć widelec, a następnie uruchomić, aby uruchomić w przeglądarce.
źródło
EDYCJA: Jak wskazano w komentarzach, jest to znacznie prostsza wersja: w
Arrays.stream(stringArray).mapToInt(Integer::parseInt).toArray()
ten sposób możemy pominąć całą konwersję do iz listy.Znalazłem inne rozwiązanie z jedną linią, ale nadal jest dość powolne (trwa około 100 razy dłużej niż cykl - testowane na tablicy 6000 0)
Co to oznacza:
źródło
Arrays.stream(stringArray).mapToInt(Integer::parseInt).toArray()
Lista:
Dla tablicy:
źródło
Możesz także użyć,
źródło
Nie znalazłem tego w poprzednich odpowiedziach, więc z Javą 8 i strumieniami:
Konwertuj
String[]
naInteger[]
:źródło
Dodatkowo - kontroluj, gdy tablica stringów nie zawiera elementów:
źródło
Użyłem maptoInt () z operacją Lambda do konwersji stringa na Integer
źródło
Arrays.toString (int []) działa dla mnie.
źródło