我试图使用.map和流函数创建一个HashSet。
s是具有"id"参数的对象,Long类型。
这是我失败的尝试:
HashSet<Long> output = s.stream()
.map(v -> v.getId())
.collect(Collectors.toSet());
分析解答
在您的情况下,流的结果将是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>
变量。