なぜstream.count()
はint
を返しますか?java stream.count()がlongを返すのはなぜですか?
私は
return (int) players.stream().filter(Player::isActive).count();
しかし、私は簡単にキャストしてint
にlong
を変換できることを理解し、なぜは、Javaではなくint
のlong
を返すstream.count()
でしょうか?
なぜstream.count()
はint
を返しますか?java stream.count()がlongを返すのはなぜですか?
私は
return (int) players.stream().filter(Player::isActive).count();
しかし、私は簡単にキャストしてint
にlong
を変換できることを理解し、なぜは、Javaではなくint
のlong
を返すstream.count()
でしょうか?
Javaが持つ最大の64ビットのプリミティブな値だからです。
countLong/countInt
、それは本当に奇妙になります 他の方法は、のカウントになります。
int
は、long
に収まりますが、それ以外の方法ではありません。 intでやりたいことがあれば何でもできますので、なぜ両方を提供する必要がありますか?
Javaが1996年の初めに出たとき、一般的なPCは8〜16Mbのメモリを持っていました。配列とコレクションの両方がメモリサイズに密接に結びついていたので、int
を使用して要素数を表現するのは当然でした.のサイズは4Gbですが、1996年のハードドライブでも巨大なサイズでしたRAM。したがって、コレクションサイズにint
の代わりにlong
を使用すると、その時点で無駄に見えます。
int
サイズは時々制限要因になることがありますが、Java設計者はそれを急変させるため、long
に変更することはできません。
Javaコレクションとは異なり、ストリームは潜在的に無制限の数の要素を持つ可能性があり、互換性の考慮事項はありません。したがって、より広い範囲の値でlong
を使用することは非常に合理的な選択のようです。
一部のJavaコレクションは、' size'が間違って報告されても(LinkedListのような)潜在的に無制限の要素を含むことができます。 – ooxi
なぜあなたは簡単にint型からint型に変換することができますが、オーバーフロー型int型からlong型に変換できないのでしょうか? –
あなたがストリームを扱うとき、通常、それは非常に大きなものなので、ストリーミングの理由です。数値が大きい場合、longをintに変換するとパーケーションが失われます。 –
が 'int'より長いため – ACV