将Ruby映射到Java映射

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

我有这个Ruby结构:

COUNTRIES = {
      'AF' => { :country => 'Afghanistan', :alpha => 'AFG', :number => '004' },
      'AT' => { :country => 'Austria', :alpha => 'AUT', :number => '040' }
}

我可以使用哪种数据结构来构成相同的结构并根据所需的键找到合适的值?我使用Gualava尝试过此操作:

Table<String, String, Integer> table = HashBasedTable.create();

table.put("Austria", "AUT", 040);

但是我如何映射主键AT?也许在Table中使用Hashmap?但是然后我如何使用一些内部键从Hashmap获取值>

java guava
2个回答
2
投票

您可以编写自己的课程。 (也有构造函数+ Getter / Setter)

public class Country {
    private String country;
    private String alpha;
    private String number;
}

要存储我们班级的对象,可以使用地图。

Map<String, Country> table = new HashMap<>();
table.put("AF", new Country("Afghanistan", "AFG", "004");
table.put("AT", new Country("Austria", "AUT", "040");

1
投票

用Java编写的惯用方式如下:

public class Country {
    private final String country;
    private final String threeLetterCode;
    private final String number;
    // constructor and getters
}

Map<String, Country> COUNTRIES = new HashMap<>();
COUNTRIES.put("AT", new Country("Austria", "AUT", "040");
// etcetera

我个人将2个字母代码作为Country的额外字段包括在内:

  • 它避免了进行“反向查找”以获得2个字母的代码。
  • 它允许您创建辅助哈希表;例如启用通过电话号码国家/地区名称进行查找。

可以使用Map<String, Map<String, String>>来实现,但是它更麻烦,效率更低且更脆弱。

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