需要用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)。我需要聚合每个组合的值。
例如,我想知道欧洲,亚洲和世界的总收入,欧洲的总利润等
发布于 2015-01-12 10:00:13
如果没有结构的细节,就很难回答。但我会猜测它们可能是什么,然后你就可以推断出你的结构了。
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
检查添加并不困难。
检索欧洲的总收入是这样的:
europe.getEconomicData(EconomicDataType.REVENUE);
简单:-)
https://stackoverflow.com/questions/27893810
复制相似问题