为了检查并演示getNextValue方法(如果hashmap存储不存在的值)并从map检索(如果存在),我在该方法下方添加了一个主类。预期的行为是,当第二次发送111键但每次将值放入哈希图中时,都需要从哈希图中获取值。不确定会产生什么影响-在每个循环中初始化Test还是每次都初始化hashMap,由于第二次发送111时111不可用?
下面是参考代码。
public List<String> getNextValue(Map<String,Object> requestparam){
Map<String,List<String>> hashMap=new HashMap<>();
String hashKey=requestparam.get("key");
if(hashMap.containsKey(hashKey){
return hashMap.get(hashKey
}
else{
List<String> value=new ArrayList<>();
value.add("aa");
hashMap.put(hashKey,value);
return value;
}
}
public static void main(String[] args){
Test t=new Test();
Map<String,Object> request=new HashMap<>();
List<String> x=new ArrayList<>();
x.add("111");
x.add("111");
x.add("222");
for(String y:x){
request.put("key",y)
System.out.println(t.getNextValue(request));
}
答案 0 :(得分:2)
每次调用getNextValue时,您将创建一个新的空 HashMap。
public List<String> getNextValue(Map<String,Object> requestparam){
Map<String,List<String>> hashMap=new HashMap<>();
这就是if(hashMap.containsKey(hashKey){
从未匹配的原因。
将您的hashMap局部变量转换为Test类的字段:
public class Test {
private final Map<String,List<String>> hashMap=new HashMap<>();
public List<String> getNextValue(Map<String,Object> requestparam){
// your code with line below removed:
// Map<String,List<String>> hashMap=new HashMap<>();
...
}
}