How do I get an IntStream from a List<Integer>?

JavaCollectionsJava 8Java StreamBoxing

Java Problem Overview


I can think of two ways:

public static IntStream foo(List<Integer> list)
{
    return list.stream().mapToInt(Integer::valueOf);
}

public static IntStream bar(List<Integer> list)
{
    return list.stream().mapToInt(x -> x);
}

What is the idiomatic way? Maybe there is already a library function that does exactly what I want?

Java Solutions


Solution 1 - Java

I guess (or at least it is an alternative) this way is more performant:

public static IntStream baz(List<Integer> list)
{
    return list.stream().mapToInt(Integer::intValue);
}

since the function Integer::intValue is fully compatible with ToIntFunction since it takes an Integer and it returns an int. No autoboxing is performed.

I was also looking for an equivalent of Function::identity, i hoped to write an equivalent of your bar method :

public static IntStream qux(List<Integer> list)
{
    return list.stream().mapToInt(IntFunction::identity);
}

but they didn't provide this identity method. Don't know why.

Solution 2 - Java

An alternate way to transform that would be using Stream.flatMapToInt and IntStream.of as:

public static IntStream foobar(List<Integer> list) {
    return list.stream().flatMapToInt(IntStream::of);
}

Note: Went through few linked questions before posting here and I just couldn't find this suggested in them either.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionfredoverflowView Question on Stackoverflow
Solution 1 - JavagontardView Answer on Stackoverflow
Solution 2 - JavaNamanView Answer on Stackoverflow