範囲と集約操作
range、sum、average、summaryStatistics です。
「範囲と集約操作」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。
範囲の生成
IntStream.range(start, end)は、startから含めないendまでの連続した整数を生成します。
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntStream.range(0, 5).forEach(System.out::println);
}
}rangeClosedは終端を含む
IntStream.rangeClosed(start, end)は最後の値を含むため、rangeClosed(1, 5)は1から5までを生成します。
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int sum = IntStream.rangeClosed(1, 5).sum();
System.out.println(sum);
}
}インデックスループの置き換え
配列の位置を反復処理する場合、範囲はインデックスベースのforループを簡潔に置き換えられます。
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
String[] names = {"a", "b", "c"};
IntStream.range(0, names.length)
.forEach(i -> System.out.println(i + ": " + names[i]));
}
}sum
sumはすべての要素を加算し、プリミティブの結果を返します。
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int total = IntStream.rangeClosed(1, 100).sum();
System.out.println(total);
}
}average
ストリームが空の場合もあるため、averageはOptionalDoubleを返します。
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
double avg = IntStream.of(2, 4, 6, 8).average().getAsDouble();
System.out.println(avg);
}
}minとmax
minとmaxはOptionalIntを返します。ストリームが空でないと分かっている場合は、getAsIntを使ってください。
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int hi = IntStream.of(3, 9, 1, 7).max().getAsInt();
int lo = IntStream.of(3, 9, 1, 7).min().getAsInt();
System.out.println(lo + " .. " + hi);
}
}count
countは要素数をlongとして返します。
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
long n = IntStream.rangeClosed(1, 50).filter(x -> x % 3 == 0).count();
System.out.println(n);
}
}summaryStatistics
summaryStatisticsは、1回の走査で要素数、合計、最小値、平均値、最大値を計算し、IntSummaryStatisticsを返します。
import java.util.IntSummaryStatistics;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntSummaryStatistics stats = IntStream.of(5, 10, 15, 20).summaryStatistics();
System.out.println(stats);
}
}個別の統計値の読み取り
統計情報オブジェクトには、getCount、getSum、getMin、getMax、getAverageが用意されています。
import java.util.IntSummaryStatistics;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntSummaryStatistics s = IntStream.rangeClosed(1, 10).summaryStatistics();
System.out.println("count=" + s.getCount());
System.out.println("avg=" + s.getAverage());
System.out.println("max=" + s.getMax());
}
}範囲と集約の組み合わせ
範囲と集約は自然に組み合わせられます。生成し、変換してから、1つの数値に集約します。
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int sumOfSquares = IntStream.rangeClosed(1, 4)
.map(n -> n * n)
.sum();
System.out.println(sumOfSquares);
}
}LongStreamの集約
LongStreamにも同じ範囲生成メソッドと集約メソッドがあり、LongSummaryStatisticsを返します。
import java.util.stream.LongStream;
public class Main {
public static void main(String[] args) {
long sum = LongStream.rangeClosed(1, 1000).sum();
System.out.println(sum);
}
}理解度チェック
rangeとrangeClosedはどのように異なりますか。
まとめ
プリミティブの範囲を生成し、集計しました。
rangeは終端を含まず、rangeClosedは終端を含みます。- 集約には
sum、average(OptionalDouble)、min/max(OptionalInt)、countがあります。 summaryStatisticsはこれらすべてを1回の走査で計算します。
よくある質問
「範囲と集約操作」レッスンは無料ですか?
はい。「範囲と集約操作」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。
「範囲と集約操作」で何を学びますか?
range、sum、average、summaryStatistics です。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Java Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「範囲と集約操作」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJava Academyレッスンでコードを書いて実行できますか?
はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。