2014-10-11 13 views
11

Attualmente sto imparando come usare Java e il mio amico mi ha detto che questo blocco di codice può essere semplificato quando si utilizza Java 8. Ha sottolineato che il parseIntArray potrebbe essere semplificato. Come faresti in Java 8?Qual è il modo più semplice per convertire una matrice di stringhe in un array int utilizzando Java 8?

public class Solution { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     String[] tokens = input.nextLine().split(" "); 
     int[] ints = parseIntArray(tokens); 
    } 

    static int[] parseIntArray(String[] arr) { 
     int[] ints = new int[arr.length]; 
     for (int i = 0; i < ints.length; i++) { 
      ints[i] = Integer.parseInt(arr[i]); 
     } 
     return ints; 
    } 
} 

risposta

30

Ad esempio:

static int[] parseIntArray(String[] arr) { 
    return Stream.of(arr).mapToInt(Integer::parseInt).toArray(); 
} 

Così ha un Stream del String[]. Utilizzare mapToInt per chiamare Integer.parseInt per ciascun elemento e convertirlo in int. Quindi chiamare semplicemente toArray sul risultante IntStream per restituire l'array.

+0

Wow! È questo java? Certamente questo è più ordinato della mia soluzione. Grazie per la rapida risposta! –

+1

@IrvinDenzelTorcuato Java 8, sì. –

+0

'Integer :: parseInt' cosa' :: 'funziona qui? –

18

È possibile passare creare il token String[] matrice:

Pattern.compile(" ") 
     .splitAsStream(input.nextLine()).mapToInt(Integer::parseInt).toArray(); 

Il risultato di Pattern.compile(" ") può essere ricordato e riutilizzato, naturalmente.

+3

Wow, nifty. Non conoscevo 'splitAsStream'. –

1

Si potrebbe, anche, ottenere la matrice direttamente da una scissione:

String input; //Obtained somewhere 
... 
int[] result = Arrays.stream(input.split(" ")) 
     .mapToInt(Integer::valueOf) 
     .toArray(); 

Qui, Arrays ha alcuni metodi bello per ottenere la corrente da un array, in modo da poter dividere direttamente nella chiamata. Successivamente, chiamare mapToInt con Integer::valueOf per ottenere lo IntStream e toArray per l'array int desiderato.

Problemi correlati