Преобразование значений ключа HashMap в массив символов в Java - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть следующий HashMap, в который я вставляю пары символ-int в метод и возвращаю этот hashmap:

HashMap<Character, Integer> hmap = new HashMap<Character, Integer>();

for (...) {
    hmap.put(string[i], number[i]); 
}

Однако, когда я хочу преобразовать эти возвращенные ключи hashmap в массив char, он также включает скобки и запятые:

char[] charArray = myReturnedHashMap.keySet().toString().toCharArray(); 
//it returns 8 char "[ A , B , C , ]" instead of just "A B C"

Итак, как я могу это исправить?

Обновление: С другой стороны, я не уверен Если HashMap - хорошая идея для использования в этом сценарии. У меня есть al oop, и мне просто нужно вернуть пары значений char и int. Затем в другом методе я конвертирую значения char в chararray. Есть идеи?

Ответы [ 5 ]

4 голосов
/ 30 апреля 2020

Ваша проблема - вызов keySet (). ToString () - это создает строковое представление карты.

Я думаю, вы хотите что-то вроде этого:

Map<Character, Integer> hmap = new HashMap<Character, Integer>();
hmap.put('c', 1);
hmap.put('d', 2);
hmap.put('e', 3);

Character[] charArray = hmap.keySet().toArray(new Character[0]);

Редактировать: если вам нужно отсортировать ключи, вы можете использовать TreeMap вместо HashMap. Но имейте в виду, что если вы имеете дело с символами и ожидаете сортировки, заданного языком c, вам нужен Collator для сортировки в TreeMap.

2 голосов
/ 30 апреля 2020

Это простое, очень удобное решение (работает со всеми видами карт) и легко сортируемое решение:

char[] charArray = map.keySet().stream()
    .map(String::valueOf)
    .collect(Collectors.joining()).toCharArray();

Вот самое быстрое решение:

char[] chars = new char[map.size()];
int i = 0;
for (Character c : map.keySet()) {
    chars[i++] = c;
}

Ключи в HashMap не отсортированы. Используйте другую реализацию карты или сортируйте поток .

1 голос
/ 30 апреля 2020

Вы можете использовать toArray() с предупреждением о том, что он вернет массив Object[].

Object[] charArray = myReturnedHashMap.keySet().toArray();

тестовая демонстрация из jshell:

jshell> HashMap<Character, Integer> a = new HashMap<>()
a ==> {}

jshell> a.put('a', 1)
$11 ==> null

jshell> a.keySet()
$12 ==> [a]

jshell> a.keySet().to
toArray(     toString()   

jshell> a.keySet().toArray()
$13 ==> Object[1] { 'a' }

jshell> a.keySet().toArray()[0]
$14 ==> 'a'

jshell> (char)a.keySet().toArray()[0]
$15 ==> 'a'
0 голосов
/ 30 апреля 2020

использование toArray()

        Map<Character, Integer> map = new HashMap<Character, Integer>();
        map.put('a', 1);
        map.put('b', 1);
        Character[] charArray = map.keySet().toArray(Character[]::new);
0 голосов
/ 30 апреля 2020

toString() в ненужном в вашем случае. Вы просто хотите взять это Set и преобразовать его в массив. Что-то вроде этого работает нормально:

    HashMap<Character, Integer> hmap = new HashMap<Character, Integer>();
    hmap.put('a',1);
    hmap.put('b',1);
    hmap.put('c',1);
    Set<Character> characters = hmap.keySet();
    Character[] chars = new Character[characters.size()];
    characters.toArray(chars);
    System.out.println(Arrays.toString(chars));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...