首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Java实现两个层次树的笛卡尔乘积的聚合

用Java实现两个层次树的笛卡尔乘积的聚合
EN

Stack Overflow用户
提问于 2015-01-12 08:42:28
回答 1查看 267关注 0票数 0

需要用Java做两个层次树结构的笛卡尔乘积的聚合,请推荐一些好的方法或API来做这件事。

树形结构:

国家/地区树:

Node|Id|ParentId

世界|1|1

亚洲|2|1

欧洲|3|1

印度|4|2

中国|5|2

英国|6|3

匈牙利|7|3

塞浦路斯|8|3

利润树:

Node|Id|ParentId

利润|1|1

收入|2|1

费用|3|1

这两个乘积的笛卡尔乘积将给我24个组合(8X3)。我需要聚合每个组合的值。

例如,我想知道欧洲,亚洲和世界的总收入,欧洲的总利润等

EN

回答 1

Stack Overflow用户

发布于 2015-01-12 10:00:13

如果没有结构的细节,就很难回答。但我会猜测它们可能是什么,然后你就可以推断出你的结构了。

代码语言:javascript
运行
复制
enum EconomicDataType {
    PROFIT, REVENUE, EXPENSE;
}

interface GeographicNode {
    int getEconomicData(EconomicDataType type);
}

class Region implements GeographicNode {
    private List<GeographicNode> geographiesInRegion;
    public int getEconomicData(EconomicDataType type) {
        return geographiesInRegion.stream()
            .mapToInt(geog -> geog.getEconomicData(type))
            .sum();
    }
}

class Country implements GeographicNode {
    private EnumMap<GeographicNode, Integer> economicData;
    public int getEconomicData(EconomicDataType type) {
        return economicData.get(type);
    }
}

我将经济数据建模为一张地图,而不是一棵树,因为坦率地说,在数据没有任何层次结构的情况下,让它具有层次结构对我来说是没有意义的。

我也没有处理数据丢失的情况。在从地图获取数据之前,使用containsKey检查添加并不困难。

检索欧洲的总收入是这样的:

代码语言:javascript
运行
复制
europe.getEconomicData(EconomicDataType.REVENUE);

简单:-)

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

https://stackoverflow.com/questions/27893810

复制
相关文章

相似问题

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