2016-04-15 22 views
6

Was ist ein einfacher Weg, um eine String[] in eine Collection<Integer> zu konvertieren? Dies ist, wie ich es gerade jetzt mache, aber nicht sicher, ob es gut ist:String-Array zu einer Sammlung von Integer?

String[] myStringNumbers; 

Arrays.stream(Arrays.asList(myStringNumbers).stream().mapToInt(Integer::parseInt).toArray()).boxed().collect(
        Collectors.toList()); 

Antwort

8

Sie müssen kein Zwischenarray erstellen. Nur analysieren und (mit statischem Import von Collectors.toList) sammeln:

Arrays.stream(myStringNumbers).map(Integer::parseInt).collect(toList()); 
3

Es ist unnötig parseInt zu verwenden, wie es das Ergebnis in die Sammelbox wird, und wie @Misha angegeben können Sie Arrays.stream verwenden den Stream zu erstellen.

Arrays.stream(myStringNumbers).map(Integer::decode).collect(Collectors.toList()); 

Bitte beachten Sie, dass diese nicht tun, um jede Fehlerbehandlung (und die Zahlen beginnen sollte nicht mit 0, # oder 0x, falls Sie keine Überraschungen wollen): So können Sie die folgende verwenden können. Wenn Sie nur Basis 10 Nummern möchten, ist Integer::valueOf eine bessere Wahl.

+2

Die 'int'-Werte sind in beiden Fällen eingerahmt, also spielt es keine Rolle, ob Sie' valueOf' oder 'parseInt' verwenden. Und es ist ziemlich seltsam, die Verwendung einer anderen Methode wie 'decode' zu ​​empfehlen, gefolgt von einer Warnung vor den Überraschungen, die dadurch verursacht werden, dass diese Methode einen anderen Zweck hat. – Holger

0

Hier ist, was ich denke:

String[] myStringNumbers = {"1", "2"}; 
List<Integer> list = Stream.of(myStringNumbers).map(Integer::valueOf).collect(Collectors.toList()); 

Ich hoffe, dass es etwas Hilfe sein kann. :)

Verwandte Themen