0Pricing
Java Academy · Урок

Диапазоны и агрегирующие операции

range, sum, average, summaryStatistics

«Диапазоны и агрегирующие операции» — бесплатный урок Java Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.

Создание диапазонов

IntStream.range(start, end) создаёт последовательные целые числа от start до, но не включая конечное значение.

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 возвращает число элементов как значение типа 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 вычисляет количество, сумму, минимум, среднее и максимум за один проход, возвращая 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());
    }
}

Объединение диапазона и агрегирования

Диапазоны и агрегаты естественно сочетаются: сгенерируйте значения, преобразуйте их, а затем сверните до одного числа.

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 вычисляет их все за один проход.

Часто задаваемые вопросы

Урок «Диапазоны и агрегирующие операции» бесплатный?

Да — полный текст урока «Диапазоны и агрегирующие операции» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.

Чему я научусь в уроке «Диапазоны и агрегирующие операции»?

range, sum, average, summaryStatistics Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Java Academy?

Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Диапазоны и агрегирующие операции»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Java Academy?

Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. IntStream и LongStream
  2. Диапазоны и агрегирующие операции
  3. Преобразование объектных потоков и обратно
  4. Генерация примитивных потоков
← Назад к Java Academy