java流映射对象参数到哈希集

时间:2019-06-26 18:58:09

标签: java java-stream

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

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

这是我失败的尝试:

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

1 个答案:

答案 0 :(得分:1)

在您的情况下,流的结果将为Set<Long>,并且您想将其分配给HashSet类型的变量。由于HashSetSet的子类型,因此您不能这样做。您可以将输出变量的类型更改为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>变量。