如何从 List<Integer> 中获取 IntStream?

2022-08-31 16:44:42

我可以想到两种方式:

public static IntStream foo(List<Integer> list)
{
    return list.stream().mapToInt(Integer::valueOf);
}

public static IntStream bar(List<Integer> list)
{
    return list.stream().mapToInt(x -> x);
}

什么是惯用方式?也许已经有一个库函数可以完全按照我想要的方式执行操作?


答案 1

我想(或者至少它是一种替代方案)这种方式更高性能:

public static IntStream baz(List<Integer> list)
{
    return list.stream().mapToInt(Integer::intValue);
}

由于函数 Integer::intValueToIntFunction 完全兼容,因为它需要 一个 并返回一个 .不执行自动装箱Integerint

我也在寻找一个函数的等价物::identity,我希望写一个等价于你的方法:bar

public static IntStream qux(List<Integer> list)
{
    return list.stream().mapToInt(IntFunction::identity);
}

但他们没有提供这种方法。不知道为什么。identity


答案 2

另一种转换方法是使用 Stream.flatMapToIntIntStream.of 作为:

public static IntStream foobar(List<Integer> list) {
    return list.stream().flatMapToInt(IntStream::of);
}

注意:在这里发布之前,我浏览了几个链接的问题,我只是找不到其中的建议。