How do I get an IntStream from a List<Integer>?
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?
Solution 1:
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:
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.