Как лучше всего определить Map & lt; String, Map & lt; String, String & gt; & gt; карта в Java?

Я портирую некоторый код 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?

1

Решение

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;
  • Enum безопасен для типов.
  • EnumMap на самом деле является массивом.
  • PathKeys я не был уверен, но это выглядит как фиксированные поля своей собственной структуры.

Переводя с Perl, JSON, простого PHP на типизированный язык, такой как java, следует использовать адекватные структуры данных и информацию о типах. После этого легче уменьшить ограничения, но пока помогает найти ошибки в бизнес-логике. Так что сохраните обобщение Map + String для последнего.

1

Другие решения

Если вы можете включить сторонние библиотеки, то добавьте гуайява и использовать Таблица вместо

0

Это делает трюки:

 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"}));
0
По вопросам рекламы [email protected]