我目前正在学习如何使用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;
}
}
答案 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数组的IntStream
和toArray
。