Da Java 8 mit leistungsstarken Lambda-Ausdrücken geliefert wird,
Ich möchte eine Funktion schreiben, um eine Liste / ein Array von Strings in ein Array / eine Liste von Ganzzahlen, Floats, Doubles usw. zu konvertieren.
In normalem Java wäre es so einfach wie
for(String str : strList){
intList.add(Integer.valueOf(str));
}
Aber wie erreiche ich dasselbe mit einem Lambda, wenn ein Array von Strings in ein Array von Integers konvertiert wird?
Lists.transform()
.quelle
Die Hilfsmethoden aus der akzeptierten Antwort werden nicht benötigt. Streams können mit Lambdas verwendet oder normalerweise mithilfe von Methodenreferenzen gekürzt werden . Streams ermöglichen funktionale Operationen.
map()
konvertiert die Elemente undcollect(...)
odertoArray()
verpackt den Stream wieder in ein Array oder eine Sammlung.Venkat Subramaniams Vortrag (Video) erklärt es besser als ich.
1 Konvertieren
List<String>
inList<Integer>
2 Konvertieren
List<String>
inint[]
3 Konvertieren
String[]
inList<Integer>
4 Konvertieren
String[]
inint[]
5 Konvertieren
String[]
inList<Double>
6 (Bonus) Konvertieren
int[]
inString[]
Natürlich sind viel mehr Variationen möglich.
Siehe auch Ideone-Version dieser Beispiele . Kann auf Gabel klicken und dann ausführen, um im Browser ausgeführt zu werden.
quelle
BEARBEITEN: Wie in den Kommentaren erwähnt, ist dies eine viel einfachere Version: Auf
Arrays.stream(stringArray).mapToInt(Integer::parseInt).toArray()
diese Weise können wir die gesamte Konvertierung zu und von einer Liste überspringen.Ich habe eine andere einzeilige Lösung gefunden, aber sie ist immer noch ziemlich langsam (dauert etwa 100-mal länger als ein for-Zyklus - getestet auf einem Array von 6000 Nullen).
Was dies tut:
quelle
Arrays.stream(stringArray).mapToInt(Integer::parseInt).toArray()
Für Liste:
Für Array:
quelle
Sie können auch verwenden,
quelle
Ich habe es in den vorherigen Antworten nicht gefunden, also mit Java 8 und Streams:
Konvertieren
String[]
inInteger[]
:quelle
Zusätzlich - Kontrolle, wenn das String-Array keine Elemente enthält:
quelle
Ich habe maptoInt () mit Lambda-Operation verwendet, um einen String in eine Ganzzahl zu konvertieren
quelle
Arrays.toString (int []) funktioniert für mich.
quelle