2014-01-17 6 views
2

Есть ли более короткий способ сделать это?Сделайте копию более сжатой в Java

Map<String, Integer> values = new HashMap<String, Integer>(); 
values.put("A", 1); 
values.put("E", 1); 
values.put("D", 2); 
values.put("R", 2); 
values.put("B", 3); 
values.put("M", 3); 
values.put("V", 4); 
values.put("Y", 4); 
values.put("J", 8); 
values.put("X", 8); 

с массивами в Java вы можете сделать это, например

int[] temp = {1,2}; 

вместо

int[] temp = new int[2] 
temp[0] = 1; 
temp[1] = 2; 

Я ищу что-то подобное с вышеприведенной карте. Возможно ли это?

Спасибо за помощь, как всегда :)

+0

Вы посмотрели методы, представленные в HashMap? .. Если вы используете eclipse, ctrl + space даст вам ответ. – TheLostMind

+0

Я не знаю, что искать в API HashMap. Не могли бы вы указать мне в правильном направлении? и я не использую eclipse @TheLostMind – herteladrian

+0

хорошо .. Если вы посмотрите на API HashMap, вы не найдете никакого метода, который бы вам помог .. Я бы посмотрел на ответ Питера ... при необходимости используйте цикл ... – TheLostMind

ответ

2

Нет, нет никакого прямого способа сделать это.

Вам необходимо инициализировать карту, как вы предложили.

Map<String, Integer> values = new HashMap<String, Integer>(); 
values.put("A", 1); 
values.put("E", 1); 
values.put("D", 2); 
values.put("R", 2); 
values.put("B", 3); 
values.put("M", 3); 
values.put("V", 4); 
values.put("Y", 4); 
values.put("J", 8); 
values.put("X", 8); 

Если в этих значениях есть какой-либо шаблон, вы можете упростить это использование цикла.

Альтернативой является использование HashMapBuilder.

См. Также здесь.

How to directly initialize a HashMap (in a literal way)?

Другой альтернативой является использование Guava. У них есть метод для этого.

4

Вы могли бы попробовать это, но вы должны быть осторожны:

HashMap<String, Integer> values = new HashMap<String, Integer>() 
{ 
    { 
     put("A", 1); 
     put("E", 1); 
     put("D", 2); 
     put("R", 2); 
     put("B", 3); 
     put("M", 3); 
     put("V", 4); 
     put("Y", 4); 
     put("J", 8); 
     put("X", 8); 
    } 
}; 

Подробнее о Double Brace Initialization here.

+1

Это то, что я сделал бы в C/C++ –

3

Там нет простого способа использования Java только, но если вы используете Guava, вы могли бы сделать это:

Map<String, Integer> values = 
    ImmutableMap.<String, Integer> builder().put("A", 1).put("E", 1).put("D", 2).build(); 

Смотрите также:

1

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

String[] keys = {"A", "B", "C"}; 
int[] values = {1, 2, 3}; 

Map<String, Integer> myMap = new HashMap<String, Integer>(); 

for(int i = 0; i < keys.length; i++){ 
    myMap.put(keys[i], values[i]); 
} 

Но вы должны быть очень осторожны, самое главное, что оба ваших массива должны иметь одинаковую длину.

+0

Пожалуйста, проверьте свой код. Это ошибка? –

+0

@ Qadir да, я исправил его, спасибо за указание – Abubakkar

Смежные вопросы