我正在尝试使用.map和streams函数创建HashSet。
s是带有Long类型的“ id”参数的对象。
这是我失败的尝试:
HashSet<Long> output = s.stream()
.map(v -> v.getId())
.collect(Collectors.toSet());
答案 0 :(得分:1)
在您的情况下,流的结果将为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>
变量。