作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
需要使用Java对两个层次树结构的笛卡尔积进行聚合,请建议一些好的方法或API来完成此操作。
树结构:
乡村树:
节点|Id|ParentId
世界|1|1
亚洲|2|1
欧洲|3|1
印度|4|2
中国|5|2
英国|6|3
匈牙利|7|3
塞浦路斯|8|3
利润树:
节点|Id|ParentId
利润|1|1
收入|2|1
费用|3|1
这两个产品的笛卡尔积会给我 24 种组合 (8 X 3)。我需要汇总每个组合的值。
例如,我想知道欧洲、亚洲和世界的总收入、欧洲的总利润等
最佳答案
如果没有详细的结构,很难回答。但我会猜测它们可能是什么,您可以推断出您的结构。
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);
}
}
我将经济数据建模为 map 而不是树,因为坦率地说,鉴于数据没有任何层次结构,将其设为层次结构对我来说没有任何意义。
我也没有处理过数据丢失的情况。在从 map 获取数据之前添加 containsKey
检查并不难。
检索欧洲总收入之类的数据是:
europe.getEconomicData(EconomicDataType.REVENUE);
简单:-)
关于java - 使用 Java 聚合两个层次树的笛卡尔积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27893810/
我是一名优秀的程序员,十分优秀!