IntStream i LongStream
Unikanie opakowywania wartości w strumieniach
IntStream i LongStream to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 1 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.
Dlaczego istnieją strumienie prymitywne
Stream<Integer> opakowuje każdy element w obiekt typu Integer. IntStream, LongStream i DoubleStream operują bezpośrednio na prymitywach, aby uniknąć narzutu związanego z boxingiem.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int sum = IntStream.of(1, 2, 3, 4).sum();
System.out.println(sum);
}
}Tworzenie IntStream
Użyj IntStream.of dla jawnie podanych wartości albo Arrays.stream dla tablicy int[].
import java.util.Arrays;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int[] data = {10, 20, 30};
IntStream s = Arrays.stream(data);
System.out.println(s.max().getAsInt());
}
}LongStream dla dużych liczb
LongStream działa podobnie jak IntStream, ale operuje na wartościach typu long, zapobiegając przepełnieniu przy obliczaniu dużych sum.
import java.util.stream.LongStream;
public class Main {
public static void main(String[] args) {
long total = LongStream.of(1_000_000_000L, 2_000_000_000L).sum();
System.out.println(total);
}
}Wyspecjalizowane operacje końcowe
Strumienie prymitywne udostępniają metody numeryczne, których brakuje strumieniom obiektów: sum, min, max i average.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntStream nums = IntStream.of(4, 8, 15, 16, 23, 42);
System.out.println(nums.average().getAsDouble());
}
}Wyniki OptionalInt
min i max zwracają OptionalInt, ponieważ strumień może być pusty. Należy użyć getAsInt albo orElse.
import java.util.OptionalInt;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
OptionalInt result = IntStream.empty().max();
System.out.println(result.orElse(-1));
}
}map pozostaje typem prymitywnym
map na obiekcie IntStream przyjmuje IntUnaryOperator i zwraca kolejny IntStream, więc nie dochodzi do boxingowania.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int sumOfSquares = IntStream.of(1, 2, 3)
.map(n -> n * n)
.sum();
System.out.println(sumOfSquares);
}
}filter w strumieniach prymitywnych
filter przyjmuje IntPredicate i zachowuje pasujące wartości prymitywne.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
long evens = IntStream.of(1, 2, 3, 4, 5, 6)
.filter(n -> n % 2 == 0)
.count();
System.out.println(evens);
}
}reduce na IntStream
reduce redukuje strumień za pomocą IntBinaryOperator. Przy podaniu wartości początkowej zwraca bezpośrednio wartość typu int.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int product = IntStream.rangeClosed(1, 5)
.reduce(1, (a, b) -> a * b);
System.out.println(product);
}
}forEach dla prymitywów
forEach przyjmuje IntConsumer, ponownie unikając boxingowania.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntStream.of(7, 8, 9).forEach(n -> System.out.println(n));
}
}Zbieranie do tablicy
toArray zwraca prymitywną tablicę int[], czyli naturalny odpowiednik IntStream.
import java.util.Arrays;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int[] doubled = IntStream.of(1, 2, 3).map(n -> n * 2).toArray();
System.out.println(Arrays.toString(doubled));
}
}Konwersja między IntStream i LongStream
IntStream.asLongStream poszerza typy prymitywne do long bez boxingowania.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
long sum = IntStream.of(1, 2, 3).asLongStream().sum();
System.out.println(sum);
}
}Szybkie sprawdzenie
Jaki jest główny powód używania IntStream zamiast Stream<Integer>?
Podsumowanie
Użyto strumieni prymitywnych, aby uniknąć boxingowania:
IntStreamiLongStreamprzechowują bezpośrednio prymitywy.- Udostępniają numeryczne operacje końcowe:
sum,min,maxiaverage. minimaxzwracająOptionalInt.map,filter,reduceitoArrayzachowują typy prymitywne.
Ucz się Java dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 104
- Lekcje
- 374
Często zadawane pytania
Czy lekcja „IntStream i LongStream” jest bezpłatna?
Tak — pełny tekst „IntStream i LongStream” 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 „IntStream i LongStream”?
Unikanie opakowywania wartości w strumieniach Ć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 1 z 4.
Ile czasu zajmuje lekcja „IntStream i LongStream”?
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