web-dev-qa-db-ja.com

List <Integer>からIntStreamを取得するにはどうすればよいですか?

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

慣用的な方法は何ですか?たぶん、まさに私がしたいことをするライブラリ関数がすでにあるのでしょうか?

37
fredoverflow

私はこの方法のほうがパフォーマンスが高いと思います(または少なくとも代替手段です):

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

関数 Integer::intValueToIntFunction と完全に互換性があるため、Integerを取り、int。いいえ オートボクシング は実行されません。

Function::identity に相当するものも探していました。あなたのbarメソッドに相当するものを書きたいと思いました。

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

しかし、彼らはこのidentityメソッドを提供しませんでした。理由がわかりません。

44
gontard

Stream.flatMapToInt および IntStream.of を使用する別の変換方法:

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

:ここに投稿する前にいくつかのリンクされた質問を行ったが、これらの質問のいずれかで提案が見つかりませんでした。

3
Naman