使用Java 8将String Array转换为int Array的最简单方法是什么?

时间:2014-10-11 10:08:20

标签: java arrays java-8 java-stream

我目前正在学习如何使用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;
    }
}

3 个答案:

答案 0 :(得分:34)

例如:

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

所以请Stream String[]。使用mapToInt为每个元素调用Integer.parseInt并转换为int。然后只需在结果toArray上调用IntStream即可返回数组。

答案 1 :(得分:18)

您可以跳过创建令牌String[]数组:

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

当然,Pattern.compile(" ")的结果可能会被记住并重复使用。

答案 2 :(得分:2)

您也可以直接从分割中获取数组:

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

这里,Arrays有一些很好的方法可以从数组中获取流,因此您可以直接在调用中拆分它。之后,使用mapToInt致电Integer::valueOf,获取所需int数组的IntStreamtoArray