![](/img/trans.png)
[英]How to insert the same value for multiple keys of an HashMap using Java Streams
[英]How link multiple keys to the same value in the HashMap
我试图将一个键的值链接到另一个键的值,但似乎无法正常工作。
例如,如果我正在创建一个HashMap
并向其添加键值对("x", 0)
。 然后我希望能够添加映射到与第一个相同的值的其他键。
因此,如果我有("x", map.get("y"))
和("y", 0)
我希望能够以某种方式链接它。 因此,如果我现在像("y", 10)
那样更新"y"
键的值,那么我希望map.get("x")
也应该返回10
。
HashMap<String, Integer> map = new HashMap<>();
map.put("x", 0);
map.put("y", 0);
//I now somehow want to link the value of x so its dependent on y
System.out.println(map.get("x"));
//Should return 0
map.put("y", 10);
System.out.println(map.get("x"));
//Should return 10 now
我不知道如何让它工作,因为 x 总是得到 y 现在的值,而不是打印值时 y 的值。
如果要将一组键与相同的 object相关联,可以通过使用可变的 object作为值来实现。
例如,您可以使用StringBuilder
或实现自定义 class。它比实现您自己的 map 的方法性能更高、更容易,它扩展HashMap
并且能够跟踪这些键组并触发一系列更新每次调用put()
、 replace()
或remove()
。
使用自定义可变Container
的解决方案可能如下所示:
HashMap<String, Container<Integer>> map = new HashMap<>();
Container<Integer> commonValue = new Container<>(0);
map.put("x", commonValue);
map.put("y", commonValue);
System.out.println("Value for 'x': " + map.get("x"));
System.out.println("Value for 'y': " + map.get("y"));
commonValue.setValue(10);
System.out.println("Value for 'x': " + map.get("x"));
System.out.println("Value for 'y': " + map.get("y"));
Container
class 本身。
public class Container<T> {
private T value;
public Container(T value) {
this.value = value;
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
@Override
public String toString() {
return String.valueOf(value);
}
}
正如我已经说过的,另一种方法是使用 JDK 已经提供的可变 class。 然后代码几乎相同:
HashMap<String, StringBuilder> map = new HashMap<>();
StringBuilder commonValue = new StringBuilder("0");
map.put("x", commonValue);
map.put("y", commonValue);
System.out.println("Value for 'x': " + map.get("x"));
System.out.println("Value for 'y': " + map.get("y"));
commonValue.replace(0, commonValue.length(), "10");
System.out.println("Value for 'x': " + map.get("x"));
System.out.println("Value for 'y': " + map.get("y"));
Output(两个版本)
Value for 'x': 0
Value for 'y': 0
Value for 'x': 10
Value for 'y': 10
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.