Каков самый простой способ преобразования 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.