我希望创建一个接受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
}