¿Cuál es la forma más sencilla de convertir una matriz de cadenas en una matriz int utilizando Java 8?

Actualmente estoy aprendiendo a usar Java y mi amigo me dijo que este bloque de código se puede simplificar cuando se usa Java 8. Señaló que parseIntArray podría simplificarse. ¿Cómo harías esto en 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; } } 

Por ejemplo:

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

Así que toma una Stream de la String[] . Use mapToInt para llamar a Integer.parseInt para cada elemento y mapToInt a un int . Luego, simplemente llame a toArray en el IntStream resultante para devolver la matriz.

Puede omitir la creación de la matriz String[] :

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

El resultado de Pattern.compile(" ") puede ser recordado y reutilizado, por supuesto.

También podría obtener la matriz directamente de una división:

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

Aquí, Arrays tiene algunos métodos agradables para obtener la secuencia de una matriz, por lo que puede dividirla directamente en la llamada. Después de eso, llame a mapToInt con Integer::valueOf para obtener el IntStream y toArray para la matriz int deseada.