【问题标题】:using a String variable for a name of a HashMap使用 String 变量作为 HashMap 的名称
【发布时间】:2020-07-30 06:26:19
【问题描述】:

我正在使用 while 循环来读取一组命令。命令格式如下:添加商品价格类型。 我将类型放在一组字符串中,之后如果该类型不存在,我想创建一个包含项目(字符串)和价格(双)的新哈希图。地图的名称应该是类型,但它不允许我使用字符串变量。有没有办法解决这个问题?

 while (!input.equals("end")){
            String[] command = input.split(" ");
            if (!categories.contains(command[3])){
                categories.add(command[3]);
                String mapName = command[3];
                Map<String, Double>  mapName = new HashMap<>();
            }
        }

我需要地图的名称,例如洗发水或食物或输入的任何内容,而不是地图名称。

【问题讨论】:

  • 你能提供更多关于“它不允许我为它使用字符串变量”的细节吗?
  • @MhamadElItawi 它在它下划线,当我将鼠标放在它上面时,它说“变量已在范围内定义”
  • @C.Weber 很抱歉,我不确定你想让我做什么?
  • @kalina199 我想知道你的变量“类别”的类型。我想这就是你所说的那一套。我认为最好说明您想要实现的目标。我假设您正在尝试按类型对“命令”进行分组。如果是这样,您已经有一些答案可以为您指明正确的方向。
  • @C.Weber 我计划制作一组包含项目类型的字符串,例如,如果给定命令“添加牛奶 1.2 乳制品”,那么乳制品将进入集合,然后我想创建一个地图,称为乳制品并包含一个键值对 - 牛奶 1.2,我现在正在尝试使用地图地图来实现它。将添加命令,然后过滤/打印我打算使用流 API 来补充的命令

标签: java dictionary hashmap


【解决方案1】:

您将需要一个地图的地图,其中外部地图的键是内部地图的名称,例如:

Map<String, Map<String, Double>> maps = new HashMap<>();

while (!input.equals("end")){
    String[] command = input.split(" ");
    if (!categories.contains(command[3])){
        categories.add(command[3]);
        String mapName = command[3];
        Map<String, Double>  map = new HashMap<>();
        maps.put(mapName, map);
    }
}

然后您可以稍后通过使用它们的名称来获取地图,例如:

maps.get(<map name>)

【讨论】:

  • 我想使用变量 commandName 包含的字符串作为我的地图的名称。例如,我需要一个名为 Dai 的地图,而不是一个名为 commandName 的地图,我只是不知道这是否可能以及如何实现它
  • 我无法使内部映射的名称与键相同 - 它始终是“映射”,但它可以作为引用类型。那是我最初的问题,如何分配我从某个地方获得的名称并且它不是硬编码的。
【解决方案2】:

不,您不能在 Java 中动态创建变量。

您需要创建地图地图:

Map<String,Map<String,Double>> maps = new HashMap<>():

maps.put(mapName, new HashMap<>());

我会非常小心地使用地图在您的程序中存储数据。地图是类的非常糟糕的替代品。

您应该使用映射而不是定义具有固定字段名称的类的唯一情况是,如果您真的不知道将要输入的值。如果输入值已知,则几乎总是更好地定义类并将输入解析到类字段中。

【讨论】:

  • 如果我理解正确的话,这也应该代替制作包含类型的集合的需要?
  • 我不确定你的意思,但我更新了答案。我强烈建议您首先考虑创建类来存储数据,而不是使用地图。仅当您的输入数据未知或没有易于预测的结构时才使用地图。
  • 谢谢你的回答,我正在解决一个在线法官系统的问题,我想我只允许一个班级,不包括匿名班级。它面向练习地图和场景
猜你喜欢
  • 1970-01-01
  • 2014-01-16
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
  • 2021-03-17
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多