はじめに
エラトステネスの篩で素数を求めるという記事を書いた時に、連続する整数のリストを作るために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」が付けられているのかもしれません。
※これは私の推測でしかありませんが...