首页 > 解决方案 > java流映射对象参数到hashset

问题描述

我正在尝试使用 .map 和流函数创建一个 HashSet。

s 是一个带有“id”参数的对象,Long 类型。

这是我失败的尝试:

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

标签: javajava-stream

解决方案


在您的情况下,流的结果将是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>变量。


推荐阅读