首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Map的自定义对象中获取doubles的二维数组

在Map的自定义对象中获取doubles的二维数组
EN

Stack Overflow用户
提问于 2020-05-12 06:03:42
回答 2查看 48关注 0票数 0

我在Map中有一个自定义对象:下面是结构

代码语言:javascript
运行
复制
Allocation {
double risk;
double[] weights;
double returnValue;
}

我有一个分配对象的Map,例如:

代码语言:javascript
运行
复制
Map<String, Allocation>

我想用Java8获得二维数组中的权重。

weights={{.3,.2,0.5},{0.4,0.4,0.2},{0.5,0.25,0.25},...}

Allocation Map包含许多如下所示的Portfolio对象:

代码语言:javascript
运行
复制
key: portfolio1, Object: (risk=0.03, weights={0.3,0.2,0.5}, returnvalue=0.5)
Key: portfolio2, Object: (risk=0.05, weights={0.4,0.4,0.2}, returnvalue=0.3)
Key: portfolio3, Object: (risk=0.01, weights={0.5, 0.25, 0.25}, return=0.6)

我想得到一个二维权重数组:

代码语言:javascript
运行
复制
weights[0] = {0.3,0.2,0.5}
weights[1] = {0.4,0.4,0.2}
weights[1] = {0.5, 0.25, 0.25} and so on...

寻找最好的方法,谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-12 06:25:43

只需对值使用map

代码语言:javascript
运行
复制
double[][] weights = 
    map.values()               
       .stream()
       .map(Allocation::getWeights)
       .toArray(double[][]::new);

Link to online tester

票数 2
EN

Stack Overflow用户

发布于 2020-05-12 06:26:07

像这样试一下。

代码语言:javascript
运行
复制
    Map<String, Allocation> map = new HashMap<>();
    Allocation a = new Allocation();
    a.weights = new double[]{10.0,12.0};
    Allocation b = new Allocation();
    b.weights = new double[]{20.0,32.0};
    map.put("A",a);
    map.put("B",b);
    double weights[][] = map.values()
                .stream()
                .map(obj->obj.weights)
                .toArray(double[][]::new);

    System.out.println(Arrays.deepToString(weights));

打印

代码语言:javascript
运行
复制
[[10.0, 12.0], [20.0, 32.0]]

注意,因为您的Allocation类没有getter,所以我在解决方案中使用了obj->obj.weights而不是Allocation::getWeights来匹配您定义的类。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61740190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档