0Pricing
Java Academy · レッスン

範囲と集約操作

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. IntStream と LongStream
  2. 範囲と集約操作
  3. Object ストリームとの相互変換
  4. プリミティブストリームの生成
← Java Academyに戻る