Java和HashMap - 如何添加到现有值?

时间:2014-01-27 01:06:14

标签: java hashmap client-server

我目前正在研究客户端/服务器应用程序,我正在使用HashMap来识别每个客户端。客户端将两个值传递给服务器 - idx。我使用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();

有人可以帮我吗?

5 个答案:

答案 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);