如何保留 Map.of 工厂中的插入顺序?

Java 9 提供Map.of()了轻松创建具有固定值的地图的功能。

问题:我想创建一个保留插入顺序的映射,例如LinkedHashMap. 那家工厂可以吗?至少map.of()不保留顺序...


Cats萌萌
浏览 226回答 3
3回答

小怪兽爱吃肉

LinkedHashMap::of确实没有工厂方法,而且 aMap本身没有订单,所以我认为它的唯一方法是构建一个,LinkedHashMap如果你真的需要的话。顺便说一句,来自JEP 本身:具体集合类(例如,ArrayList、HashSet)上的静态工厂方法已从该提案中删除...还有一个问题,就是类上的静态方法是由子类继承的。假设要添加一个静态工厂方法 HashMap.of()。由于 LinkedHashMap 是 HashMap 的子类,因此应用程序代码可以调用 LinkedHashMap.of()。这最终会调用 HashMap.of(),这完全不是人们所期望的!这里的static要点是方法是继承的,但不是可HashMap覆盖的,因此如果将这样的方法添加到它可能不会在LinkedHashMap.如果可以使用guava,则可以使用ImmutableMap记录为:一个不可变的、基于哈希的 Map,具有可靠的用户指定的迭代顺序......

弑天下

正如Map(重点是我的)的 Java apidoc 中所述:不可修改的地图的Map.of,Map.ofEntries和Map.copyOf静态工厂方法提供了一种方便的方法来创建不可修改的地图。这些方法创建的 Map 实例具有以下特点:...映射的迭代顺序未指定并且可能会发生变化。...不幸的是,Java API 中没有等效的便捷方法来创建LinkedHashMap. 如果您想要一致的迭代顺序,那么您将需要手动创建LinkedHashMap并填充它(并且 - 如果需要 - 使用 包装它Collections.unmodifiableMap)。考虑创建您自己的便捷方法,该方法等效于Map.of但具有一致的迭代顺序(或找到已经提供此功能的现有库)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java