是否存在比这更好的方法来使用流将
String
解析为 Integer
:
String line = "1 2 3 4 5";
List<Integer> elements = Arrays.stream(line.split(" ")).mapToInt(x -> Integer.parseInt(x))
.boxed().collect(Collectors.toList());
如果直接将 String 解析为 Integer,则可以省去一步:
String line = "1 2 3 4 5";
List<Integer> elements = Arrays.stream(line.split(" ")).map(Integer::valueOf)
.collect(Collectors.toList());
或者您可以坚持使用原始类型,通过创建
int
数组而不是 List<Integer>
来提供更好的性能:
int[] elements = Arrays.stream(line.split(" ")).mapToInt(Integer::parseInt).toArray ();
也可以更换
Arrays.stream(line.split(" "))
与
Pattern.compile(" ").splitAsStream(line)
但我不确定哪个更有效。
从 java-9 开始,还有另一种方法可以通过
Scanner#findAll
:
int[] result = scan.findAll(Pattern.compile("\\d+"))
.map(MatchResult::group)
.mapToInt(Integer::parseInt)
.toArray();