Использование потоков Java для преобразования коллекции в карту: как поместить предопределенный Enum в качестве значения - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть коллекция Long, и по какой-то причине мне нужно создать карту из этой коллекции, в которой элементы коллекции имеют ключи, а 1 предопределенный Enum в качестве значения (все ключи имеют одинаковое значение).

Я пытаюсь добиться этого с помощью Streams, как показано ниже:

private Map<Long, Marker> mapMarker(Collection<Long> ids, Marker marker) {
    return ids.stream().collect(Collectors.toMap(Function.identity(), marker));
}

Компилятор не удалось с этой ошибкой:

no instance(s) of type variable(s) T, U exist so that Marker conforms to Function<? super T, ? extends U>

Может кто-нибудь объяснить мне, почемуэто не удается?Есть ли способ получить ожидаемый результат с помощью Streams?

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Если Marker - это перечисление, которое вы хотите сопоставить со всеми ключами в ids, вы можете сделать это следующим образом:

return ids.stream().collect(Collectors.toMap(Function.identity(), id -> marker));

Вы были достаточно близки, просто id -> marker являетсяFunction как ожидается для Collectors.toMap

0 голосов
/ 04 декабря 2018

Параметры в Collectors.toMap должны быть функциями, которые преобразуют вход в желаемый выход.Вы можете использовать переменную-заполнитель (например, i) для представления вашего ввода.Например, для функции тождественности возьмите input i и верните i.Для сопоставления каждого элемента marker, введите i и верните marker:

private Map<Long, Marker> mapMarker(Collection<Long> ids, Marker marker) {
    return ids
            .stream()
            .collect(Collectors.toMap(i -> i, i -> marker));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...