Почему этот Collectors.toMap имеет проблемы - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь преобразовать Set<String> в Map. Но я не уверен, почему keyMapper и valueMapper не принимают ключевой функциональный объект.

private static void populateHeader(Map<String, List<String>> headerMap, 
             Set<String> keys) {
          headerMap= keys.stream()
          .collect(Collectors.toMap(key -> key.toString(),parseLine(key -> key)));
    }

Сообщение об ошибке:

Ошибка: (83, 91) java: несовместимые типы: java .lang.String не является функциональным интерфейсом

Ответы [ 2 ]

0 голосов
/ 24 января 2020

Не уверен, почему код не удался изначально, вот строка, которая сработала! Для этого кода я получаю Набор ключей (Set Keys) для каждого ключа, который мне нужен, чтобы загрузить строку Список тегов (это функция parseLine). так, наконец, вернуть карту ключей и ее теги

... Map> headerMap = keys.stream (). collect (Collectors.toMap (ключ -> ключ, ключ -> parseLine (getHeaderLine (ключ)) )); ...

Наконец-то это сработало. Спасибо тебе Джеймс

0 голосов
/ 24 января 2020
      headerMap= keys.stream().collect(Collectors.toMap(key -> key.toString(),parseLine(key -> key)));

Предположительно parseLine(key -> key) должно быть key -> parseLine(key). Технически parseLine может вернуть функциональный объект правильного типа (Function<String,String>).

Сообщение об ошибке поможет.

Вы можете написать это как:

      headerMap = keys.stream().collect(
          Collectors.toMap(Function.identity(), key -> parseLine(key))
      );

Стоит отметить, что headerMap является параметром, поэтому присвоить его немного странно. Значение, переданное вызывающей функцией, не будет затронуто.

...