gpt4 book ai didi

java - java中给定键随机访问映射条目

转载 作者:行者123 更新时间:2023-11-30 02:15:07 25 4
gpt4 key购买 nike

我有一本 Map<?, String> 类型的字典。运行时 key 类型未知。我仍然可以调用get()比如说,一个字符串,如果存在这样的元素,我就可以正确获取存储的对象。

现在我修改该对象,并想将其放回字典中。理想情况下,我想做这样的事情:

    Map<String, String> hat = new HashMap<>();
hat.put("bunny", "rabbit");
Map<?, String> magicHat = hat;
String trick = magicHat.get("bunny");
if (trick != null) {
trick = "jack".concat(trick);
magicHat.put("bunny", trick);
}

但是,可以理解的是,调用 magicHat.put("bunny", trick);给出以下编译错误:incompatible types: String cannot be converted to CAP#1 .

解决此问题的一种方法是使用流(或迭代)来获取映射的条目,然后使用该条目修改值:

    Map.Entry<?, String> entry = magicHat.entrySet()
.stream()
.filter(e -> "bunny".equals(e.getKey()))
.findFirst()
.orElse(null);
if (entry != null) {
String trick = "jack".concat(entry.getValue());
entry.setValue(trick);
}

但在现实生活中,我只能使用 Java 6,无法享受流的舒适感。迭代所有条目似乎效率很低。

是否有一种优雅的方法可以在给定 key 的情况下随机访问 map 中的条目?

Here is无法编译的代码,以及 here is解决办法。

感谢您的见解。

最佳答案

您应该将键类型设置为“对象”而不是通配符 (?)。这样,您就不必知道类型。但是,您应该确保永远不要在 map 中存储不同类型的键。

Map<String, String> hat = new HashMap<>();
hat.put("bunny", "rabbit");
Map<Object, String> magicHat = new HashMap<>();
hat.forEach(magicHat::put); // Edit: Added this
String trick = magicHat.get("bunny"); // String extends Object
if (trick != null) {
trick = "old".concat(trick);
magicHat.put("bunny", trick);
}

在大多数情况下,此问题的解决方案是使用泛型类型变量。这样,您仍然具有类型安全性,但不必在编译时知道键类型。

关于java - java中给定键随机访问映射条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48807603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com