Каков самый простой способ преобразования String Array в массив int с помощью Java 8?

В настоящее время я изучаю, как использовать Java, и мой друг сказал мне, что этот блок кода можно упростить при использовании Java 8. Он отметил, что parseIntArray можно упростить. Как вы это сделаете в 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;
    }
}

Ответ 1

Например:

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

Итак, возьмите Stream String[]. Используйте mapToInt для вызова Integer.parseInt для каждого элемента и преобразования в int. Затем просто вызовите toArray в результирующем IntStream, чтобы вернуть массив.

Ответ 2

Вы можете пропустить создание маркера String[]:

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

Результат Pattern.compile(" ") можно, конечно, запомнить и повторно использовать.

Ответ 3

Вы также можете получить массив непосредственно из раскола:

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

Здесь Arrays имеет несколько хороших методов для получения потока из массива, поэтому вы можете разбить его непосредственно в вызове. После этого вызовите mapToInt с помощью Integer::valueOf, чтобы получить IntStream и toArray для нужного массива int.