2017-01-31 2 views
-1

Я не понимаю, почему это не удается;Java lambda toMap of map <String, Boolean>

Map<String, Boolean> iMap = Arrays.asList("1","2","3","4","5").stream() 
    .collect(Collectors.toMap(k->k, Boolean.TRUE)); 

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

Multiple markers at this line 
    - Type mismatch: cannot convert from T to K 
    - The method toMap(Function<? super T,? extends K>, Function<? super T,? extends U>) 
     in the type Collectors is not applicable for the arguments ((<no type> k) -> {}, Boolean) 

Любая помощь приветствуется.

+3

Каков тип второго аргумента 'toMap'? –

+0

Не функция. Понял, спасибо. –

+0

Вместо 'Arrays.asList (« 1 »,« 2 »,« 3 »,« 4 »,« 5 »). Stream()', вы можете использовать 'Stream.of (« 1 »,« 2 », «3», «4», «5») ', чтобы выразить свое намерение напрямую. – Holger

ответ

3

Collectors.toMap() ожидает Function для обоих параметров. Вместо этого вы пытаетесь передать Boolean. Попробуйте следующее:

Collectors.toMap(k->k, k->Boolean.TRUE) 
+0

Бинго, спасибо. –

+0

Действительно? Collectors.toMap (k-> k, v-> Boolean.TRUE) лучше не читается? –

+0

@ Николас Это вводит в заблуждение. 'k' не представляет ключ, он представляет элемент потока. Использование 'v' для второго параметра распространяется только на путаницу. – shmosel

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