Spongi
Spongi

Reputation: 549

Java 8 Streams parsing to Integer

Does it exist a 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());

Upvotes: 8

Views: 14085

Answers (2)

Eugene
Eugene

Reputation: 120858

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();

Upvotes: 4

Eran
Eran

Reputation: 393846

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.

Upvotes: 15

Related Questions