2017-06-20 3 views
10

なぜstream.count()intを返しますか?java stream.count()がlongを返すのはなぜですか?

私は

return (int) players.stream().filter(Player::isActive).count(); 

しかし、私は簡単にキャストしてintlongを変換できることを理解し、なぜは、Javaではなくintlongを返すstream.count()でしょうか?

+9

なぜあなたは簡単にint型からint型に変換することができますが、オーバーフロー型int型からlong型に変換できないのでしょうか? –

+4

あなたがストリームを扱うとき、通常、それは非常に大きなものなので、ストリーミングの理由です。数値が大きい場合、longをintに変換するとパーケーションが失われます。 –

+2

が 'int'より長いため – ACV

答えて

12

Javaが持つ最大の64ビットのプリミティブな値だからです。

countLong/countInt 

、それは本当に奇妙になります 他の方法は、のカウントになります。

intは、longに収まりますが、それ以外の方法ではありません。 intでやりたいことがあれば何でもできますので、なぜ両方を提供する必要がありますか?

16

Javaが1996年の初めに出たとき、一般的なPCは8〜16Mbのメモリを持っていました。配列とコレクションの両方がメモリサイズに密接に結びついていたので、intを使用して要素数を表現するのは当然でした.のサイズは4Gbですが、1996年のハードドライブでも巨大なサイズでしたRAM。したがって、コレクションサイズにintの代わりにlongを使用すると、その時点で無駄に見えます。

intサイズは時々制限要因になることがありますが、Java設計者はそれを急変させるため、longに変更することはできません。

Javaコレクションとは異なり、ストリームは潜在的に無制限の数の要素を持つ可能性があり、互換性の考慮事項はありません。したがって、より広い範囲の値でlongを使用することは非常に合理的な選択のようです。

+0

一部のJavaコレクションは、' size'が間違って報告されても(LinkedListのような)潜在的に無制限の要素を含むことができます。 – ooxi

関連する問題