如何从List <integer>?</integer>获取IntStream

时间:2014-07-08 14:05:08

标签: java collections java-8 java-stream boxing

我可以想到两种方式:

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);
}

什么是惯用法?也许已经有一个库函数完全符合我的要求?

2 个答案:

答案 0 :(得分:41)

我猜(或者至少它是另一种选择)这种方式更具性能:

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

因为函数Integer::intValueToIntFunction完全兼容,因为它需要Integer并返回int。没有执行autoboxing

我也在寻找相当于Function::identity的内容,我希望写出相当于bar方法的内容:

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

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

答案 1 :(得分:3)

使用Stream.flatMapToIntIntStream.of的另一种转换方式为:

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

注意:在这里发表文章之前,先经过了几个链接的问题,但我也找不到在其中提出的建议。