Коллекция ключ-значение с удобной системой обозначений - PullRequest
2 голосов
/ 14 августа 2011

Я ищу коллекцию, подобную Map, которая позволила бы мне создавать новый объект с помощью PHP / Python / JavaScript:

var foo = new Foo({'foo': 'bar'})

Наиболее близким в Java является HashMap:

Map<String, String> parameters = new HashMap<String, String>();
parameters.put("test", "one two");
parameters.put("foo", "bar");

Это слишком многословно для моей цели.Я хотел бы записать и обработать пары ключ-значение более простым способом.

Я приветствую любые предложения - создание собственного типа коллекции, создание собственной фабрики для объекта Map и т. Д. Я просто хочу увеличить числосимволов, которые необходимо записать для создания такой коллекции.

Ответы [ 2 ]

3 голосов
/ 14 августа 2011

Когда я придерживался базового JDK, я видел способ просто использовать анонимные инициализаторы:

Map<String, String> parameters = new HashMap<String, String>() {{
  put("test", "one two");
  put("foo", "bar");
}};

Вы также можете взглянуть на конструктор Guava ImmutableMap: http://guava -libraries.googlecode.com / svn / trunk / javadoc / com / google / common / collect / ImmutableMap.Builder.html

Если вы хотите продвинуться немного дальше, вы можете написатьсинтаксический анализатор для чего-то вроде JSON (или просто самого JSON и библиотеки JSON), а затем запишите Map в виде строки.

3 голосов
/ 14 августа 2011

У вас есть (не очень известный) трюк инициализации с двойной скобкой :

Map<String, String> Map = new HashMap<String, String>() {{
      put("test", "one two");
      put("foo", "bar");
}};

С оператором java 7 diamond это еще более кратко, см .:

Map<String, String> Map = new HashMap<>() {{
      put("test", "one two");
      put("foo", "bar");
}};
...