Получение объекта потока в методе Collectors toMap с использованием метода Reference в Java 8 - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь перебрать список, используя stream() и помещая в карту, где ключ - сам элемент steam, а значение - AtomicBoolean, true.

List<String> streamDetails = Arrays.asList("One","Two");
toReplay = streamDetails.stream().collect(Collectors.toMap(x -> x.toString(), new AtomicBoolean(true)));

Я получаю следующие ошибки во время компиляции.

Type mismatch: cannot convert from String 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> x) -> {}, 
     AtomicBoolean)

Что я могу делать не так, чем мне заменить x -> x.toString() на?

1 Ответ

3 голосов
/ 05 апреля 2020

new AtomicBoolean(true) - это выражение, которое недопустимо для второго параметра, равного Collectors.toMap.

toMap здесь потребуется Function<? super String, ? extends AtomicBoolean> (предназначенный для преобразования элемента потока (или типа String) в значение карты вашего предполагаемого типа, AtomicBoolean), и правильный аргумент может быть:

Collectors.toMap(x -> x.toString(), x -> new AtomicBoolean(true))

Который также можно записать с помощью Function.identity:

Collectors.toMap(Function.identity(), x -> new AtomicBoolean(true))
...