параметр объекта карты потока Java в хэшсет - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь создать HashSet, используя функции .map и streams.

s - это объект с параметром id, тип Long.

Вот моя неудачная попытка:

     HashSet<Long> output = s.stream()
                             .map(v -> v.getId())
                             .collect(Collectors.toSet());

1 Ответ

1 голос
/ 26 июня 2019

В вашем случае результат потока будет Set<Long>, и вы хотите присвоить его переменной типа HashSet.Поскольку HashSet является подтипом Set, вы не можете сделать это.Либо вы меняете тип выходной переменной на Set<Long>, либо вы явно приводите результат сбора к HashSet<Long>.Поскольку Collectors::toSet использует HashMap по умолчанию - оно должно работать.

РЕДАКТИРОВАТЬ

Как правильно указал shmosel, делать предположения отип возврата, так что если вы хотите HashSet, конкретно используйте toCollection(HashSet::new):

HashSet<Long> output = s.stream()
                .map(v -> v.getId())
                .collect(Collectors.toCollection(HashSet::new));

Теперь результат операции collect будет HashSet<Long>, так что вы сможете присвоить его HashSet<Long> илиSet<Long> переменная.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...