Java HashMap - variable.getKey - 通用打印方法



我希望创建一个接受String作为参数的方法,然后打印出String引用的相应HashMap

sensorMappings = new HashMap<>();
sensorMappings.put(136, "doorNumber");

这是我打印HashMap的方法:

void printHashMap(String mapChoice){
  for (Integer ID : mapChoice.keySet()) {
    String key = ID.toString();
    String value = sensorMappings.get(ID);
    System.out.println(key + " " + value);
  }
}

我收到错误:

Can't resolve method 'keySet()'

编辑 - 完整代码:

主.class

sensorInfo.printHashMap("mapChoice");

传感器.class

public class Sensors {
  private HashMap<Integer, String> sensorMappings;
Sensors(){
  sensorMappings = new HashMap<>();
  sensorMappings.put(136, "doorNumber");
}
void printHashMap(String mapChoice){
  for (Integer ID : mapChoice.keySet()) {
    String key = ID.toString();
    String value = sensorMappings.get(ID);
    System.out.println(key + " " + value);
  }
}
我有多个哈希图,

并希望创建一个通用方法,通过传入所需的哈希图来打印它们。

如果你在

另一个按名称键的变量中注册所有不同的hashMaps,你可以实现这一点。 然后,您可以查找已注册的任何哈希映射。

下面是一个例子。

public class MapRegistry {
  static Map<String,HashMap<Integer,String>> allMaps = new HashMap<>();
  public static void register(String name, HashMap<Integer,String> myMap) {
    allMaps.put(name, myMap);
  }
  public static HashMap<Integer,String> find(String name) {
    return allMaps.get(name);
  }
}

在您的传感器类中

Sensors(){
  sensorMappings = new HashMap<>();
  MapRegistry.register("sensorMappings", sensorMappings);
  sensorMappings.put(136, "doorNumber");
}

然后查找特定地图:

void printHashMap(String mapChoice){
  HashMap<Integer,String> map = MapRegistry.find(mapChoice);
  for (Integer ID : map.keySet()) {
    String key = ID.toString();
    String value = map.get(ID);
    System.out.println(key + " " + value);
  }
}

如果您准备传递注册表或可以注入注册表,则不需要静态类。

如果您删除地图,则需要注意,因为注册表将保留它们。 因此,您需要确保注册表也已更新,否则会出现泄漏。

不,你不能。Java是一种强类型语言。您必须传递映射而不是字符串才能编译它。也许你可以看看反射API(除非你有字符串原因使用它,否则不建议这样做)。

你根本没有传递哈希图。您正在传递一个字符串。也许您正在尝试传递哈希映射而不是字符串。

printHashMap(sensorMappings);

在打印功能中。

void printHashMap(HashMap mapChoice){
    for (Integer ID : mapChoice.keySet()) {
        String key = ID.toString();
        String value = sensorMappings.get(ID);
        System.out.println(key + " " + value);
    }
}

如果您尝试对 HashMap 进行编码并将其转换回字符串,那么您可以尝试这样做

String value = sensorMappings.toString();
value = value.substring(1, value.length()-1);           //remove curly brackets
String[] keyValuePairs = value.split(",");              //split the string to creat key-value pairs
Map<String,String> map = new HashMap<>();               
for(String pair : keyValuePairs)                        //iterate over the pairs
{
    String[] entry = pair.split("=");                   //split the pairs to get key and value 
    map.put(entry[0].trim(), entry[1].trim());          //add them to the hashmap and trim whitespaces
}

最新更新