LoginSignup
16
7

More than 3 years have passed since last update.

【Java】IntstreamのrangeとrangeClosedの違い

Last updated at Posted at 2019-04-07

はじめに

エラトステネスの篩で素数を求めるという記事を書いた時に、連続する整数のリストを作るためにIntstream.rangeClosed()を使いました。
その時は特に何も思わなかったのですが、改めてIntstreamクラスのAPIを確認してみると、名前が似ているIntstream.range()というメソッドがありました。

そこで、両者の違いについて少しまとめてみました。

Intstream.range(int startInclusive, int endExclusive)

startInclusive(含む)からendExclusive(含まない)の範囲でステップ1でインクリメントした値を含む、順序付けされた順次IntStreamを返します。

上記のAPIの説明を見ると、「開始値以上、終了値未満の連続する整数を返す」ということになります。
下記のコードだと、最大値として「99」が返されます。

public static void main(String[] args) {
    int max = java.util.stream.IntStream.range(1, 100).max().getAsInt();
    System.out.println(max);
}

Intstream.rangeClosed(int startInclusive, int endInclusive)

startInclusive(含む)からendInclusive(含む)の範囲でステップ1でインクリメントした値を含む、順序付けされた順次IntStreamを返します。

上記のAPIの説明を見ると、「開始値以上、終了値以下の連続する整数を返す」ということになります。
下記のコードだと、最大値として「100」が返されます。

public static void main(String[] args) {
    int max = java.util.stream.IntStream.rangeClosed(1, 100).max().getAsInt();
    System.out.println(max);
}

ところでclosedって?

数値の集合を数直線上で表した時に、両端点を含む区間のことを閉区間(closed interval)と呼びます。
Intstream.rangeClosed()は、両端点を含む数値の集合を生成するメソッドなので、メソッド名に閉区間を示す「closed」が付けられているのかもしれません。
※これは私の推測でしかありませんが...

16
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
7