次の2つの方法が考えられます。
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);
}
慣用的な方法は何ですか?たぶん、まさに私がしたいことをするライブラリ関数がすでにあるのでしょうか?
私はこの方法のほうがパフォーマンスが高いと思います(または少なくとも代替手段です):
public static IntStream baz(List<Integer> list)
{
return list.stream().mapToInt(Integer::intValue);
}
関数 Integer::intValue
は ToIntFunction
と完全に互換性があるため、Integer
を取り、int
。いいえ オートボクシング は実行されません。
Function::identity
に相当するものも探していました。あなたのbar
メソッドに相当するものを書きたいと思いました。
public static IntStream qux(List<Integer> list)
{
return list.stream().mapToInt(IntFunction::identity);
}
しかし、彼らはこのidentity
メソッドを提供しませんでした。理由がわかりません。
Stream.flatMapToInt
および IntStream.of
を使用する別の変換方法:
public static IntStream foobar(List<Integer> list) {
return list.stream().flatMapToInt(IntStream::of);
}
注:ここに投稿する前にいくつかのリンクされた質問を行ったが、これらの質問のいずれかで提案が見つかりませんでした。