Диапазоны и агрегирующие операции
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 — локальная установка не требуется.
Все уроки этого курса
- IntStream и LongStream
- Диапазоны и агрегирующие операции
- Преобразование объектных потоков и обратно
- Генерация примитивных потоков