Operacje na zakresach i agregowanie
range, sum, average, summaryStatistics
Operacje na zakresach i agregowanie to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Java Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Java Academy zawiera 4 lekcji w sumie.
Generowanie zakresów
IntStream.range(start, end) generuje kolejne liczby całkowite od start do wartości poprzedzającej end, czyli end nie jest uwzględniane.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntStream.range(0, 5).forEach(System.out::println);
}
}rangeClosed uwzględnia koniec
IntStream.rangeClosed(start, end) uwzględnia końcową wartość, więc rangeClosed(1, 5) zwraca wartości od 1 do 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);
}
}Zastępowanie pętli indeksowanych
Zakresy są przejrzystym zamiennikiem indeksowanych pętli for podczas iterowania po pozycjach tablicy.
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 dodaje wszystkie elementy i zwraca wynik prymitywny.
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 zwraca OptionalDouble, ponieważ strumień może być pusty.
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 i max
min i max zwracają OptionalInt. Należy użyć getAsInt, gdy wiadomo, że strumień nie jest pusty.
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 zwraca liczbę elementów jako wartość typu 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 oblicza liczbę elementów, sumę, minimum, średnią i maksimum w jednym przebiegu, zwracając obiekt 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);
}
}Odczytywanie poszczególnych statystyk
Obiekt podsumowania udostępnia metody getCount, getSum, getMin, getMax i 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());
}
}Łączenie zakresu i agregacji
Zakresy i agregacje naturalnie się łączą: należy wygenerować dane, przekształcić je, a następnie zredukować do jednej liczby.
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);
}
}Agregacje LongStream
LongStream oferuje te same metody zakresów i agregacji, zwracając obiekt 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);
}
}Szybkie sprawdzenie
Czym różnią się range i rangeClosed?
Podsumowanie
Generowano i podsumowywano prymitywne zakresy:
rangenie uwzględnia końca, arangeClosedgo uwzględnia.- Agregacje:
sum,average(OptionalDouble),min/max(OptionalInt) orazcount. summaryStatisticsoblicza je wszystkie w jednym przebiegu.
Często zadawane pytania
Czy lekcja „Operacje na zakresach i agregowanie” jest bezpłatna?
Tak — pełny tekst „Operacje na zakresach i agregowanie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Java Academy, przejdź na CoddyKit PRO. Kurs Java Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Operacje na zakresach i agregowanie”?
range, sum, average, summaryStatistics Ćwiczysz Java Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Java Academy?
Nie wymagamy żadnego doświadczenia. Java Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Operacje na zakresach i agregowanie”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Java Academy?
Tak. Każda lekcja Java Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- IntStream i LongStream
- Operacje na zakresach i agregowanie
- Mapowanie do strumieni obiektów i z nich
- Generowanie strumieni typów prostych