gpt4 book ai didi

java - 如何将 ByteObjectHashMap 转换/改编为 JDK Map?

转载 作者:行者123 更新时间:2023-12-05 03:27:50 27 4
gpt4 key购买 nike

原始 map 似乎没有实现 java.util.Map

如果我有一个函数,接受 JDK Map 作为参数,现在想传递 eclipse 集合实现,例如 ByteObjectHashMap,最简单的方法是什么?

它说 here ,那个包 org.eclipse.collections.impl.map.mutable包含 MutableMap 接口(interface)的实现。 Primitive 在 mutable 的子包中,我希望它们实现 MutableMap,而后者又实现 java.util.Map

最佳答案

今天完成此操作的最简单方法是复制 ByteObjectMap 的内容到 Map<Byte, Object>使用 forEachKeyValue .

这是一个转换 ByteObjectMap<String> 的例子至 Map<Byte, String> .

@Test
public void byteObjectHashMapToMap()
{
ByteObjectMap<String> map =
ByteObjectMaps.mutable.<String>empty()
.withKeyValue((byte) 1, "1")
.withKeyValue((byte) 2, "2")
.withKeyValue((byte) 3, "3")
.withKeyValue((byte) 4, "4");

Map<Byte, String> target = new HashMap<>();
map.forEachKeyValue(target::put);

Map<Byte, String> expected = Map.of((byte) 1, "1",
(byte) 2, "2",
(byte) 3, "3",
(byte) 4, "4");
Assert.assertEquals(expected, target);
}

更新:Eclipse Collections 11.1 版本将有一个对象和原始映射的新方法,称为injectIntoKeyValue。 .一旦发布,以下内容将成为可能的解决方案。

// Eclipse Collections MutableMap as target
Map<Byte, String> target =
map.injectIntoKeyValue(Maps.mutable.empty(), MutableMap::withKeyValue);

// JDK Map as target
Map<Byte, String> jdkTarget =
map.injectIntoKeyValue(new HashMap<>(),
(m, k, v) -> {m.put(k, v); return m;});

添加 Map 将是 OSS 社区的合理贡献原始 map 的 View ,但这还没有完成。这可能是因为这不是一项微不足道的工作。当 Project Valhalla 在 JDK 中可用时,Eclipse Collections 中的原始映射实现 Map<byte, String> 会更合理。 .如果没有对 Java 中泛型的原始专门化,这是不可能的。

您链接到的包文档指的是“相关包”,但这显然是值得澄清的,因为我可以看到它可能会让人感到困惑。感谢您指出这一点。

关于java - 如何将 ByteObjectHashMap 转换/改编为 JDK Map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71349112/

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