如何从 Set<Integer> 创建 IntStream?

2022-09-04 21:53:51

我目前这样做:

Set<Integer> integers = ... // sourced from elsewhere in code
IntStream intStream = integers.stream().mapToInt(value -> value);

必须将值映射到值,将 转换为 .有没有办法在没有冗余部分的情况下做到这一点?Stream<Integer>IntStreammapToInt(...)


答案 1

不,你必须使用或(对我来说看起来更好)。与泛型类一样,它应该适用于任何泛型流元素类型,因此不可能以类型安全的方式向API添加更简单的东西。例如,考虑接口中有方法。它肯定会看起来像这样更好:.mapToInt(value -> value).mapToInt(Integer::intValue)StreamasIntStream()Stream

IntStream intStream = integers.stream().asIntStream();

但是,例如,没有什么可以阻止您调用此类方法。在 Java 中,无法仅对特定的泛型参数启用调用该方法。因此,在另一种类型的流上意外调用它将编译良好,但会导致运行时异常,这在静态类型语言中是坏的。但是使用 或 强制类型检查:您必须提供一个返回的函数,以便正确报告编译错误。Stream<String>.mapToInt(value -> value).mapToInt(Integer::intValue)intstringStream.mapToInt(value -> value)

如果你真的在乎,你可以自由地在你的项目中创建一个静态方法,如下所示:

public class Streams {
    public static IntStream intStream(Collection<Integer> c) {
        return c.stream().mapToInt(Integer::intValue);
    }
}

并像这样使用它

IntStream intStream = Streams.intStream(integers);

答案 2

推荐