如何从YAML订购HashMap?

问题描述 投票:1回答:3

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

classes:
 beginner: 1000
 proplayer: 2000
 admin: 5000

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

我需要按顺序排列,因为这是播放器将升级到的类的顺序。因此,如果他是初学者,则需要升级到Proplayer,依此类推。

我需要某种方法来解决它,因此我可以使初学者位于索引0处,以便猜测玩家将移至下一个类,在这种情况下,玩家将进入proplayer(索引1),但是我也需要检索该类的int值,以便向玩家收取他要移至的类的金额。

java yaml bukkit
3个回答
1
投票

[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);

0
投票

简而言之,使用列表?

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

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

how to read lists in yaml?


0
投票

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

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

请参见YAML规范中的Example 2.26. Ordered Mappings1.01.11.2

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

© www.soinside.com 2019 - 2024. All rights reserved.