I’m trying to convert a map based Stream
into a two-dimensional array. I have figured out how to store it in a one dimensional array. Here is working code snippet:
Float[] floatArray = map.entrySet()
.stream()
.map(key -> key.getKey().getPrice())
.toArray(size -> new Float[size]);
When I execute the above code, I get my Float
array populated as expected. Now I need to extend this to a two-dimensional array where I need to store the result in first dimension of a 2d array along these lines:
Float[][1] floatArray = map.entrySet()
.stream()
.map(key -> key.getKey().getPrice())
.toArray(size -> new Float[size][1]);
The code above does not work. Can you please let me know how to accomplish this task with Java 8 streams? Thanks in advance!
If you look at
<A> A[] toArray(IntFunction<A[]> generator)
, you see that it converts aStream<A>
to aA[]
, which is a 1D array ofA
elements. So in order for it to create a 2D array, the elements of theStream
must be arrays.Therefore you can create a 2D array if you first
map
the elements of yourStream
to a 1D array and then calltoArray
:You can make use of the following:
Which creates a 2D array just like you expected.
Note: By the comment 1) you have to replace
YourKeyClass
with the class containing the methodgetPrice()
.An alternative is also to use
.keySet()
instead of.entrySet()
: