Несоответствие типов: невозможно преобразовать с картына карту - PullRequest
0 голосов
/ 28 мая 2018

Попытка получить отображаемую цифру между 1-26 из входной строки, используя потоковую операцию.input - XYZ или xyz ожидаемый вывод: Map - X - 24 Y - 25 Z - 26

Ниже логика выдаёт ошибку компиляции:

 Scanner scr = new Scanner(System.in);
    String testString = scr.next();
    Map<Character, Integer> charDigitMap = testString.chars().mapToObj(i -> (char) i).collect( Collectors.toMap(c -> c ,c -> (c - 'A' + 1))); 
charDigitMap.forEach((k,v) -> System.out.println("--"+k+"--"+v));

Ошибка: Несоответствие типов: невозможно преобразовать изMap<Object,Object> до Map<Character,Integer>

PS: выглядит проблема с затмением.Отлично работает на intelliJ.

1 Ответ

0 голосов
/ 28 мая 2018

Вам не хватает прописных букв (если ввод небольшой регистр).Добавьте следующее, и ваш код должен работать нормально:

.map(Character::toUpperCase)

Другой подход:

Map<Character, Integer> intArray = "xyz".chars()
                            .map(Character::toUpperCase)
                            .collect(HashMap::new,
                                (c,m) -> c.put((char)m,
                                 m-64),HashMap<Character,Integer>::putAll
                            );

Вывод:

{X=24, Y=25, Z=26}
...