Как добавить предопределенные значения в Pair Hashmap в Java - PullRequest
0 голосов
/ 17 января 2019

Я знаю, как добавить значения в хэш-карту, но что если хеш-карта содержит кортеж Pair.

Я попробовал следующее

private HashMap<String, Pair<String,String>> s = new HashMap<String, Pair<String, String>>() {{put("New York",("US Dollar", "NYC"));
    }};

Предоставляет сообщение об ошибке:

Несколько маркеров на линии

  • Синтаксическая ошибка на токене ",", недопустимый оператор присваивания
  • Левая часть присваивания должна быть переменной

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Нет поддержки синтаксиса Java для создания конструкции Java в Java, такой как литерал карты. Если вы поместите "US Dollar", "NYC" в круглые скобки, как вы сделали, то компилятор предположит, что есть какое-то выражение. Он находит запятую и жалуется, что нет оператора присваивания. В действительности возможны другие операторы, такие как +, но это сообщение, которое дает компилятор. Синтаксический анализатор просто опустил возможность «выражения присваивания» в дереве разбора, пытаясь понять, что оказалось синтаксической ошибкой.

Предполагая, что вы уже создали свой собственный класс Pair, который уже находится в области, просто создайте Pair явно с помощью new. (Вы можете использовать оператор diamond, доступный с Java 7, чтобы сократить ваш код.)

private HashMap<String, Pair<String, String>> s = new HashMap<>() {{
    put("New York", new Pair<>("US Dollar", "NYC"));
}};

Использование этой «двойной скобки» инициализации может работать, но только потому, что она

  1. Создает анонимный подкласс Hashmap с внешними скобками.
  2. Создает инициализатор экземпляра с внутренними скобками, который вы используете для инициализации карты.

Начиная с Java 9, вы можете использовать Map.of, чтобы указывать Map с конкретными значениями, без дополнительных дополнительных анонимных классов.

private Map<String, Pair<String,String>> s = Map.of("New York", new Pair<>("US Dollar", "NYC"));

Вы также можете рассмотреть возможность создания собственного осмысленного класса для использования вместо общего Pair класса.

0 голосов
/ 17 января 2019

Начиная с Java 9 вы можете использовать Map.of:

Map<String, Pair<String,String> values = Map.of("New York", new Pair<>("US Dollar", "NYC"));

Я не знаю, что такое Pair, поскольку в JDK по умолчанию нет класса Pair, но я предполагаю, что у него есть конструктор, который принимает оба значения.

Ваш подход создает анонимный класс, который также имеет ссылку на включающий объект, так что это не хорошее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...