2016-04-15 24 views
6

Che cos'è un modo semplice per convertire uno String[] in uno Collection<Integer>? Questo è come lo sto facendo adesso, ma non sono sicuro se va bene:Array di stringhe a una raccolta di numeri interi?

String[] myStringNumbers; 

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

risposta

8

Non è necessario creare un array intermedio. Basta analizzare e raccogliere (con l'importazione statica di Collectors.toList):

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

Non è necessario utilizzare parseInt in quanto sarà casella il risultato alla raccolta, e come dichiarato @Misha è possibile utilizzare Arrays.stream per creare il flusso. Così si può utilizzare il seguente:

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

Si prega di notare che questo non significa effettuare una gestione degli errori (ed i numeri non dovrebbero iniziare con 0, # o 0x nel caso in cui non si vuole sorprese). Se desideri solo 10 numeri di base, Integer::valueOf è una scelta migliore.

+2

I valori 'int' sono racchiusi in entrambi i casi, quindi se si utilizza' valueOf' o 'parseInt' non fa differenza. Ed è piuttosto strano raccomandare l'uso di un metodo diverso come 'decode' seguito da un avvertimento sulle sorprese causate dal fatto che questo metodo ha uno scopo diverso. – Holger

0

Ecco cosa penso:

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

spero che possa essere di qualche aiuto. :)

Problemi correlati