Java 8 Streams 解析为整数

问题描述 投票:0回答:2

是否存在比这更好的方法来使用流将

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());
java java-8 java-stream
2个回答
15
投票

如果直接将 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)

但我不确定哪个更有效。


4
投票

从 java-9 开始,还有另一种方法可以通过

Scanner#findAll
:

int[] result = scan.findAll(Pattern.compile("\\d+"))
                   .map(MatchResult::group)
                   .mapToInt(Integer::parseInt)
                   .toArray();
© www.soinside.com 2019 - 2024. All rights reserved.