有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用Java实现两棵层次树笛卡尔积的数据结构聚合

需要使用Java对两个层次树结构的笛卡尔积进行聚合,请推荐一些好的方法或API

树结构:

乡土树:

节点| Id |父Id

世界| 1 | 1
亚洲| 2 | 1
欧洲| 3 | 1
印度| 4 | 2
中国| 5 | 2
英国| 6 | 3
匈牙利| 7 | 3
塞浦路斯| 8 | 3

利润树:

节点| Id |父Id
利润| 1 | 1
收入| 2 | 1
费用| 3 | 1

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

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


共 (1) 个答案

  1. # 1 楼答案

    如果没有结构的细节,有点难以回答。但我猜他们可能是什么,你可以推断出你的结构

    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);
    

    简单:-)