我希望创建一种方法,接受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来创建一个通用方法来打印它们。
答案 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
}