如何将 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.

中,如果没有对泛型的原始专业化,这是不可能的

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