How to convert a Java 8 Stream into a two dimensional array?

MazS :

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!

Eran :

If you look at <A> A[] toArray(IntFunction<A[]> generator), you see that it converts a Stream<A> to a A[], which is a 1D array of A elements. So in order for it to create a 2D array, the elements of the Stream must be arrays.

Therefore you can create a 2D array if you first map the elements of your Stream to a 1D array and then call toArray:

Float[][] floatArray = 
    map.entrySet()
       .stream()
       .map(key -> new Float[]{key.getKey().getPrice()})
       .toArray(size -> new Float[size][1]);

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=475941&siteId=1