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