簡體   English   中英

如何將Java 8 Stream轉換為二維數組?

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

我正在嘗試將基於地圖的Stream轉換為二維數組。 我已經想出如何將它存儲在一維數組中。 這是工作代碼片段:

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

當我執行上面的代碼時,我按預期填充了我的Float數組。 現在我需要將它擴展到一個二維數組,我需要將結果存儲在這些行的二維數組的第一維中:

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

上面的代碼不起作用。 你能告訴我如何使用Java 8流完成這項任務嗎? 提前致謝!

如果您查看<A> A[] toArray(IntFunction<A[]> generator) ,您會看到它將Stream<A>轉換為A[] ,這是A元素的一維數組。 因此,為了創建2D數組, Stream的元素必須是數組。

因此,如果首先將Stream的元素map到1D數組,然后調用toArray ,則可以創建2D數組:

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

您可以使用以下內容:

Float[][] array = map.entrySet()
    .stream()
    .map(Map.Entry::getKey)
    .map(YourKeyClass::getPrice) // 1)
    .map(price -> new Float[]{ price })
    .toArray(Float[][]::new);

這就像你期望的那樣創建一個2D數組。

注意:通過注釋1)你必須用包含方法getPrice()的類替換YourKeyClass ,返回一個Float對象。


另一種方法是使用.keySet()而不是.entrySet()

Float[][] array = map.keySet().stream()
    .map(YourKeyClass::getPrice)
    .map(price -> new Float[]{price})
    .toArray(Float[][]::new);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM