我可以想到两种方式:
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);
}
什么是惯用法?也许已经有一个库函数完全符合我的要求?
答案 0 :(得分:41)
我猜(或者至少它是另一种选择)这种方式更具性能:
public static IntStream baz(List<Integer> list)
{
return list.stream().mapToInt(Integer::intValue);
}
因为函数Integer::intValue
与ToIntFunction
完全兼容,因为它需要Integer
并返回int
。没有执行autoboxing。
我也在寻找相当于Function::identity
的内容,我希望写出相当于bar
方法的内容:
public static IntStream qux(List<Integer> list)
{
return list.stream().mapToInt(IntFunction::identity);
}
但他们没有提供此identity
方法。不知道为什么。
答案 1 :(得分:3)
使用Stream.flatMapToInt
和IntStream.of
的另一种转换方式为:
public static IntStream foobar(List<Integer> list) {
return list.stream().flatMapToInt(IntStream::of);
}
注意:在这里发表文章之前,先经过了几个链接的问题,但我也找不到在其中提出的建议。