Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java 8 Streams parsing to Integer

Does it exist better way to parse String to Integer using stream than this :

 String line = "1 2 3 4 5";
List<Integer> elements = Arrays.stream(line.split(" ")).mapToInt(x -> Integer.parseInt(x))
    .boxed().collect(Collectors.toList());
like image 681
Spongi Avatar asked Jun 25 '17 11:06

Spongi


Video Answer


2 Answers

You can eliminate one step if you parse the String directly to Integer:

String line = "1 2 3 4 5";
List<Integer> elements = Arrays.stream(line.split(" ")).map(Integer::valueOf)
    .collect(Collectors.toList());

Or you can stick to primitive types, which give better performance, by creating an int array instead of a List<Integer>:

int[] elements = Arrays.stream(line.split(" ")).mapToInt(Integer::parseInt).toArray ();

You can also replace

Arrays.stream(line.split(" "))

with

Pattern.compile(" ").splitAsStream(line)

I'm not sure which is more efficient, though.

like image 120
Eran Avatar answered Oct 13 '22 06:10

Eran


There's one more way to do it that will be available since java-9 via Scanner#findAll:

int[] result = scan.findAll(Pattern.compile("\\d+"))
                   .map(MatchResult::group)
                   .mapToInt(Integer::parseInt)
                   .toArray();
like image 41
Eugene Avatar answered Oct 13 '22 05:10

Eugene