Как добавить предопределенные значения в Pair Hashmap в Java

Вы можете объявить многомерные массивы вроде:

// 4 x 5 String arrays, all Strings are null
// [0] -> [null,null,null,null,null]
// [1] -> [null,null,null,null,null]
// [2] -> [null,null,null,null,null]
// [3] -> [null,null,null,null,null]

String[][] sa1 = new String[4][5];
for(int i = 0; i < sa1.length; i++) {           // sa1.length == 4
    for (int j = 0; j < sa1[i].length; j++) {     //sa1[i].length == 5
        sa1[i][j] = "new String value";
    }
}


// 5 x 0  All String arrays are null
// [null]
// [null]
// [null]
// [null]
// [null]
String[][] sa2 = new String[5][];
for(int i = 0; i < sa2.length; i++) {
    String[] anon = new String[ /* your number here */];
    // or String[] anon = new String[]{"I'm", "a", "new", "array"};
    sa2[i] = anon;
}

// [0] -> ["I'm","in","the", "0th", "array"]
// [1] -> ["I'm", "in", "another"]
String[][] sa3 = new String[][]{ {"I'm","in","the", "0th", "array"},{"I'm", "in", "another"}};
0
задан Brian Tompsett - 汤莱恩 12 February 2019 в 09:22
поделиться

2 ответа

Не поддерживается синтаксис 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"));
}};

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

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

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

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

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

0
ответ дан rgettman 12 February 2019 в 09:22
поделиться

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

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

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

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

0
ответ дан Jack 12 February 2019 в 09:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: