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?
Since you created a Stream with a single element, you can use findFirst() to get that element: int randInt = new Random(). ints(1,60,121). findFirst().
IntStream find valueUse findFirst() or findAny() methods on the InstStream object to get the first or any value. By default, IntStream is created as sequential stream unless call the parallel() on the IntStream. For sequential streams, the findFirst() and findAny() methods return the same result.
range() method generates a stream of numbers starting from start value but stops before reaching the end value, i.e start value is inclusive and end value is exclusive. Example: IntStream. range(1,5) generates a stream of ' 1,2,3,4 ' of type int .
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With