Перечислите значение ключа с уникальным ключом в качестве объекта или перечисления - PullRequest
0 голосов
/ 25 марта 2019

Вопрос

  • Я хотел бы получить список пар ключ-значение, например, например, HashMap, или другой, если это рекомендуется.

  • Этот список должен содержать объекты уникальных ключей, используемые для извлечения значений.

  • Ключи НЕ должны быть STRING, поскольку строка не является уникальной и любое значение может быть передано.

  • Также константы ограничены и используют понятия строк и не должны учитываться.

Пример

  • Требуется, например, список списка [Color.Red] = "Красный".

  • На этом этапе я создал перечислениесодержащий все ключи.Например, enum Color {RED, BLUE}, затем добавьте его в новый HashMap.

  • Таким образом, единственный способ получить цвет - это использовать enum в качестве списка ключей [Color.RED].

Реализация

public final static Map<Color, String> colors = new HashMap<>();
public final static enum Color{RED, BLUE;}
static
{
   colors.put(RED, "red");
   colors.put(BLUE, "blue");
}
public static string getColor(Color color)
{
   return colors.get(color);
}

Нужна помощь

Существует ли типКоллекция на Java, которая может сделать работу?Если нет, то что может быть лучшим способом сделать это?

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Потенциальный раствор

После проверки enum и его возможностей, есть способ присвоить значения для Key в enum, например: follow.

  • Создайте новый enum и назначьте Key, например public enum Color {RED;}.
  • Добавить параметр конструктора, например public enum Color {RED ("red");}
  • Добавление конструктора в перечисление, например public enum Color {RED ("red"); Цвет () {}}
  • Добавить новое поле внутри enum с именем value, например private String value; public String getValue () {возвращаемое значение;}
  • Установить значение поля в конструкторе перечисления, например, Color (String value) {this.value = value;}
  • Перечисление работает таким образом: для каждого добавляемого вами ключа создается новое поле экземпляра String, связанное с ключом, а затем он использует объявленный вами конструктор для сохранения значения.

Полная реализация

public enum Color
{
   //[PROP]
   RED("red"),
   GREEN("green"),
   BLUE("blue");

   private String value;
   public String getValue {return value;}

   //[BUILD]
   Color(String value) {this.value = value;}

   //[UTIL]
   Color[] getKeys() {return this.values;} //values method is already a method existing in enum class, we are just proposing another method name here as a facade for simplicity.
}
  • Если мы хотим получить элемент, мы просто делаем Color.RED.value, таким образом, только существующие ключи возвращают требуемое значение.
  • Обратите внимание, что значение не обязательно должно быть именем ключа, но может быть совершенно другим значением.

Пожалуйста, прокомментируйте, если у вас есть более простое решение, не усложняя решение.

0 голосов
/ 25 марта 2019

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

Пример:

Map hm = new HashMap();
hm.put("1", new Integer(1));
hm.put("2", new Integer(2));
hm.put("3", new Integer(3));
hm.put("4", new Integer(4));
hm.put("1", new Integer(5));// value integer 1 is overwritten by 5

Кроме того, Ключ карты является общим , вы можете указать, что вы хотите, а не только String, например:

Map<Integer, String> hm = new HashMap<>();
hm.put(10, "1");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...