如何从 YAML 获取有序的 HashMap?

How to get ordered HashMap from YAML?

我正在尝试从我的 config.yml 文件中检索 Map,但找不到保持之前设置的键顺序的方法。

classes:
 beginner: 1000
 proplayer: 2000
 admin: 5000

我知道 classes 的键集给我一个 Map,但顺序与显示的不一样。

我需要它是有序的,因为这是玩家将升级到的 classes 的顺序。 所以如果他是初学者,他需要升级到proplayer等等。

我需要一些方法来解决这个问题,这样我就可以得到初学者在索引 0 处,以便猜测玩家将移动到下一个 class,在这种情况下,proplayer (索引 1),但我还需要检索 class 的 int 值,以便向玩家收取他要移动到的 class 的金额。

简而言之使用列表?

classes:
  - beginner: 1000
  - proplayer: 2000
  - admin: 5000 

正在阅读:我认为这里已经回答了:

how to read lists in yaml?

Map 的实现不关心条目顺序。

因此,在使用 classes 层次结构轻松检索每个值的同时,我会创建一个并行列表来跟踪它们的顺序。

classes:
  order:
  - beginner
  - proplayer
  - admin
  cost:
    beginner: 1000
    proplayer: 2000
    admin: 5000
List<String> orderedList = data.getStringList("classes.order");
String item = orderedList.get(0);
int cost = data.getInt("classes.cost." + item);

YAML 中的有序映射可以这样指定:

classes: !!omap
  - beginner: 1000
  - proplayer: 2000
  - admin: 5000

请参阅 YAML 规范中的 Example 2.26. Ordered Mappings (1.0, 1.1 or 1.2)

请注意,您的 YAML 解析器不一定支持它,但很有可能(SnakeYAML 确实支持它)。
将用于结果的实际类型也特定于您的 YAML 解析器,但应映射到语言中最自然有序的映射类型。