Java 8 Streams解析为Integer

时间:2017-06-25 11:52:15

标签: java java-8 java-stream

是否存在使用流将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());

2 个答案:

答案 0 :(得分:10)

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

我不确定哪个更有效率。

答案 1 :(得分:3)

还有一种方法可以通过Scanner#findAll从java-9开始提供:

int[] result = scan.findAll(Pattern.compile("\\d+"))
                   .map(MatchResult::group)
                   .mapToInt(Integer::parseInt)
                   .toArray();