我目前正在研究客户端/服务器应用程序,我正在使用HashMap来识别每个客户端。客户端将两个值传递给服务器 - id
和x
。我使用id
作为我的密钥,对于HashMap中的每个元素,我想使用x
的值将具有匹配键id
的特定元素添加到值中。
我有以下代码:
HashMap<Integer, Integer> clients = new HashMap<Integer, Integer>();
int x;
sock = serv.accept();
in = new ObjectInputStream(sock.getInputStream());
in2 = sock.getInputStream();
out = new ObjectOutputStream(sock.getOutputStream());
int id = in2.read();
System.out.println("id = " + id);
Object o = in.readObject();
System.out.println("Server received " + o);
if (o instanceof Integer) {
x = ((Integer) o).intValue();
clients.put(id, 0 + x); //doesn't work, I need to be able to add to the existing value instead of overwriting the value
} else if (o instanceof String) {
clients.put(id, 0);
}
out.writeObject(clients.get(id));
out.flush();
有人可以帮我吗?
答案 0 :(得分:2)
Integer previousValue = clients.get(id);
if(previousValue == null) previousValue = 0;
clients.put(id, previousValue + x);
答案 1 :(得分:2)
您需要从地图中读取值,然后您可以添加类似
的内容Integer resultantValue = x;
Integer previousValue = clents.get(id);
if(previousValue!=null){
resultantValue+=previousValue;
}
clients.put(id, resultantValue);
答案 2 :(得分:0)
您可以这样做:
Integer value = new Integer(0);
if (clients.containsKey(id)) {
value = clients.get(id);
}
value.add(new Integer(x) + value);
clients.put(id, value);
答案 3 :(得分:0)
执行此操作的最佳方法可能是专门为整数创建HashMap扩展,其方法专门用于以您指定的方式添加到特定值,如下所示:
import java.util.HashMap;
public class IntegerHashMap extends HashMap<Integer,Integer>{
public void addValueToKey(Integer key, Integer valueToAdd){
Integer originalValue = this.get(key);
Integer newValue = originalValue + valueToAdd;
this.put(key, newValue);
}
}
如果需要的话,这将使代码再次易于使用,从外观来看,它很可能是,并且还具有仅使用正确类型的HashMap的额外好处。
答案 4 :(得分:0)
在Java 8或更高版本中,您可以使用Merge。
int newValue = 3;
clients.merge(id, newValue, Integer::sum);