java - java流映射对象参数到hashset
问题描述
我正在尝试使用 .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>
变量。
推荐阅读
- java - 我在服务器上得到 java.io.FileNotFoundException 而在本地调试它工作正常
- javascript - 从 href 中删除兄弟姐妹类
- javascript - Python,从 javascript 网站抓取数据
- visual-studio - Docker Container url 无法通过 Windows 10/docker CE/.net Core 上的 localhost 或 ip 访问
- azure - 身份服务器 4 - PasswordSignInAsync 方法抛出 IsNotAllowed=true
- kubernetes - Helm 不安装 StorageClass
- javascript - 根据输入的 mm/dd/yyyy 使用 OnBlur 获取准确年龄
- google-cloud-platform - 如何使用服务帐户文件对 GCP API 进行身份验证
- database - Grails连接池 - 连接没有关闭?
- vba - 向对象添加事件处理程序