Я портирую некоторый код PHP на Java. У меня есть класс, который определяет следующую карту:
class Something {
protected $channels = array(
'a1' => array(
'path_key1' => 'provider_offices',
'path_key2' => 'provider_offices',
),
'a2' => array(
'path_key1' => 'provider_users',
'path_key2' => 'provider_users',
),
'a3' => array(
'path_key1' => 'provider_offices',
'path_key2' => 'provider_offices',
),
'a4' => array(
'path_key1' => 'attri1',
'path_key2' => 'attri1',
),
'a5' => array(
'path_key1' => 'attrib2',
'path_key2' => 'attrib2',
),
'a6' => array(
'path_key1' => 'diagnosis',
'path_key2' => 'diagnosis',
),
'a7' => array(
'path_key1' => 'meds',
'path_key2' => 'meds',
),
'a8' => array(
'path_key1' => 'risk1',
'path_key2' => 'risk1',
),
'a9' => array(
'path_key1' => 'risk2',
'path_key2' => 'risk2',
),
'a0' => array(
'path_key1' => 'visits',
'path_key2' => 'visits',
),
);
}
В PHP доступ к данным осуществлялся примерно так:
$key = 'a9';
$pathKey2Value = $this->channels[$key]['path_key2'];
Я начал реализовывать Map<String, Map<String, String>>
член в Java, но это казалось слишком сложным, а также определение A1
, A2
и т. д. занятия.
Что было бы самым элегантным способом сделать то же самое в Java?
enum An {a1, a2, a3, a0}
class PathKeys {
String pathKey1;
String pathKey2;
PathKeys(String pathKey1, String pathKey2) {
this.pathKey1 = pathKey1;
this.pathKey2 = pathKey2;
}
}
Map<An, PathKeys> channels = new EnumMap<>(An.class);
void put(An an, PathKeys pk) {
channels.put(an, pk);
}
put(An.valueOf("a1"), new PathKeys("provider_offices", "provider_offices"));
String s = channels.get(An.a1).pathKey1;
Переводя с Perl, JSON, простого PHP на типизированный язык, такой как java, следует использовать адекватные структуры данных и информацию о типах. После этого легче уменьшить ограничения, но пока помогает найти ошибки в бизнес-логике. Так что сохраните обобщение Map + String для последнего.
Это делает трюки:
Map<String, Map<String, String>> map = new HashMap<String, Map<String, String>>();
private HashMap<String, String> loadMap(String[] str){
HashMap<String, String> map = new HashMap<String, String>();
map.put(str[0], str[1]);
map.put(str[2], str[3]);
return map;
}
map.put("a1", loadMap(new String[]{"path_key1", "provider_offices", "path_key2", "provider_offices"}));
map.put("a2", loadMap(new String[]{"path_key1", "attri1", "path_key2", "attri1"}));