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

时间:2017-01-11 11:44:48

标签: java hashmap

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

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()'

编辑 - 完整代码:

Main.class

sensorInfo.printHashMap("mapChoice");

Sensor.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,希望通过传入所需的HashMap来创建一个通用方法来打印它们。

3 个答案:

答案 0 :(得分:2)

如果您将所有各种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);
  }
}

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

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

答案 1 :(得分:1)

不,你不能。 Java是一种强类型语言。你必须传递map而不是String来编译它。也许您可以查看reflection API(除非您有字符串理由使用它,否则不建议使用)。

答案 2 :(得分:0)

你根本没有传递hashmap。你正在传递一个字符串。也许您正在尝试传递散列图而不是字符串。

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
}