如何将 convert/adapt ByteObjectHashMap 转换为 JDK Map?
How convert/adapt ByteObjectHashMap to a JDK Map?
原始地图似乎没有实现 java.util.Map
。
如果我有一个函数,接受 JDK Map 作为参数,现在想传递 eclipse 集合实现,例如 ByteObjectHashMap
,最简单的方法是什么?
它说 here,那个包裹 org.eclipse.collections.impl.map.mutable
包含 MutableMap
接口的实现。 Primitive 在可变的子包中,我希望它们实现 MutableMap
,而后者又实现 java.util.Map
.
今天完成此操作的最简单方法是使用 forEachKeyValue
.
将 ByteObjectMap
的内容复制到 Map<Byte, Object>
这是一个将 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;});
OSS 社区为原始地图添加 Map
视图是一个合理的贡献,但这尚未完成。这可能是因为这不是一项微不足道的工作。当 Project Valhalla 在 JDK 中可用时,Eclipse Collections 中的原始地图实现 Map<byte, String>
会更合理。在 Java.
中,如果没有对泛型的原始专业化,这是不可能的
您链接到的包文档指的是“相关包”,但这显然值得澄清,因为我可以看出它可能会造成混淆。感谢您指出这一点。
原始地图似乎没有实现 java.util.Map
。
如果我有一个函数,接受 JDK Map 作为参数,现在想传递 eclipse 集合实现,例如 ByteObjectHashMap
,最简单的方法是什么?
它说 here,那个包裹 org.eclipse.collections.impl.map.mutable
包含 MutableMap
接口的实现。 Primitive 在可变的子包中,我希望它们实现 MutableMap
,而后者又实现 java.util.Map
.
今天完成此操作的最简单方法是使用 forEachKeyValue
.
ByteObjectMap
的内容复制到 Map<Byte, Object>
这是一个将 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;});
OSS 社区为原始地图添加 Map
视图是一个合理的贡献,但这尚未完成。这可能是因为这不是一项微不足道的工作。当 Project Valhalla 在 JDK 中可用时,Eclipse Collections 中的原始地图实现 Map<byte, String>
会更合理。在 Java.
您链接到的包文档指的是“相关包”,但这显然值得澄清,因为我可以看出它可能会造成混淆。感谢您指出这一点。