Maz*_*azS 4 java lambda multidimensional-array java-8 java-stream
我正在尝试将地图转换为Stream二维数组.我已经想出如何将它存储在一维数组中.这是工作代码片段:
Float[] floatArray = map.entrySet()
.stream()
.map(key -> key.getKey().getPrice())
.toArray(size -> new Float[size]);
Run Code Online (Sandbox Code Playgroud)
当我执行上面的代码时,我Float按预期填充了我的数组.现在我需要将它扩展为一个二维数组,我需要将结果存储在这些行的二维数组的第一维中:
Float[][1] floatArray = map.entrySet()
.stream()
.map(key -> key.getKey().getPrice())
.toArray(size -> new Float[size][1]);
Run Code Online (Sandbox Code Playgroud)
上面的代码不起作用.你能告诉我如何使用Java 8流完成这项任务吗?提前致谢!
您可以使用以下内容:
Float[][] array = map.entrySet()
.stream()
.map(Map.Entry::getKey)
.map(YourKeyClass::getPrice) // 1)
.map(price -> new Float[]{ price })
.toArray(Float[][]::new);
Run Code Online (Sandbox Code Playgroud)
这会像您预期的那样创建一个二维数组。
注意:根据注释1),您必须替换YourKeyClass为包含getPrice()返回Float对象的方法的类。
另一种方法是使用.keySet()代替.entrySet():
Float[][] array = map.keySet().stream()
.map(YourKeyClass::getPrice)
.map(price -> new Float[]{price})
.toArray(Float[][]::new);
Run Code Online (Sandbox Code Playgroud)
如果你看<A> A[] toArray(IntFunction<A[]> generator),你会看到它将a转换Stream<A>为a A[],这是一维A元素数组.因此,为了创建2D数组,Stream必须是数组的元素.
因此,如果您首先使用1D数组map的元素Stream然后调用,则可以创建2D数组toArray:
Float[][] floatArray =
map.entrySet()
.stream()
.map(key -> new Float[]{key.getKey().getPrice()})
.toArray(size -> new Float[size][1]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4526 次 |
| 最近记录: |