Java 如何改进Map<;整数,Map<;整数,Map<;PAXType、BigDecimal>&燃气轮机&燃气轮机;用番石榴

Java 如何改进Map<;整数,Map<;整数,Map<;PAXType、BigDecimal>&燃气轮机&燃气轮机;用番石榴,java,map,guava,Java,Map,Guava,我有以下实体关系的数据结构: Map<Integer, Map<Integer, Map<PAXType, BigDecimal>>> 用于基于的快速价格查找 包装 包变量 我现在使用的方式是: 当我从数据库读取数据时,我创建/更新上面的映射。在获得所有信息后,对于每个变量,我需要将价格图从map转换为map,其中职业类型是另一个枚举。这是最终的价格格式,我需要输出序列化等 guava中是否有任何数据结构适合我所拥有的丑陋地图构造并支持我上面建议的操作?

我有以下实体关系的数据结构:

Map<Integer, Map<Integer, Map<PAXType, BigDecimal>>>
用于基于的快速价格查找

  • 包装
  • 包变量
我现在使用的方式是: 当我从数据库读取数据时,我创建/更新上面的映射。在获得所有信息后,对于每个变量,我需要将价格图从
map
转换为
map
,其中职业类型是另一个枚举。这是最终的价格格式,我需要输出序列化等


guava中是否有任何数据结构适合我所拥有的丑陋地图构造并支持我上面建议的操作?

guava与此无关,您需要创建一些具有有意义名称的对象。首先将
Map
封装到持有此映射的类中,例如
PriceByType

Map<Integer, Map<Integer, PriceByType>>
以及:

公共类PriceByVariant{
私有最终映射byVariant=/。。。
公共BigDecimal查找(int变量,PAXType类型){
//在此处理未知值
按variant.get(variant.find(type)返回;
}
}

番石榴与此无关,您需要创建几个具有有意义名称的对象。首先将
Map
封装到持有此映射的类中,例如
PriceByType

Map<Integer, Map<Integer, PriceByType>>
以及:

公共类PriceByVariant{
私有最终映射byVariant=/。。。
公共BigDecimal查找(int变量,PAXType类型){
//在此处理未知值
按variant.get(variant.find(type)返回;
}
}

除了Tomasz的建议,建议在类<代码> Price Bype < /C>中封装<代码> MAP>代码>(注意,如果<代码> PAXType 是枚举,您应该使用枚举),我认为您应该考虑使用“替换为<代码> MAP”。表格用例:

通常,当您试图在同一时间索引多个键时 随着时间的推移,你会得到像
Map
这样的东西,这很难看,也很难使用。番石榴 提供支持此用例的新集合类型Table 对于任何“行”类型和“列”类型


您的索引是package和package variant,都是整数,所以table应该以
table

结束,除了Tomasz的回答建议在类
PriceByType
中封装
Map
(注意,如果
PAXType
是一个枚举,您应该使用EnumMap)我认为你应该考虑使用“代替<代码> map < /代码>。表格用例:

通常,当您试图在同一时间索引多个键时 随着时间的推移,你会得到像
Map
这样的东西,这很难看,也很难使用。番石榴 提供支持此用例的新集合类型Table 对于任何“行”类型和“列”类型


您的索引是package和package variant,两者都是整数,因此对于
EnumMap
table
建议,表应该以
table

+1结尾(因此,毕竟,番石榴确实为OP提供了所需的帮助)。+1对于
EnumMap
table
建议(因此,毕竟番石榴确实为OP的需求提供了帮助)。
Map<Integer, PriceByVariant>
public class PriceByType {

    private final Map<PAXType, BigDecimal> byType = //...

    public BigDecimal find(PAXType type) {
        return byType.get(type);
    }

}
public class PriceByVariant {

    private final Map<Integer, PriceByType> byVariant = //...

    public BigDecimal find(int variant, PAXType type) {
        //handle unknown values here
        return byVariant.get(variant).find(type);
    }

}