Java Academy · leksjon

IntStream og LongStream

Unngå boxing i strømmer

Leksjon 1 av 413 trinn

IntStream og LongStream er en gratis leksjon i Java Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Java Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Java Academy inneholder totalt 4 leksjoner.

Hvorfor primitive strømmer finnes

Stream<Integer> pakker hvert element inn i et Integer-objekt. IntStream, LongStream og DoubleStream arbeider direkte med primitive verdier for å unngå overhead fra boxing.

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);
    }
}

Opprette en IntStream

Bruk IntStream.of for eksplisitte verdier, eller Arrays.stream med en 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 for store tall

LongStream fungerer på samme måte som IntStream, men arbeider med long-verdier og unngår overflow ved store summer.

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);
    }
}

Spesialiserte terminaloperasjoner

Primitive strømmer tilbyr numeriske metoder som objektstrømmer mangler: sum, min, max og 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());
    }
}

Resultater med OptionalInt

min og max returnerer OptionalInt fordi strømmen kan være tom. Bruk getAsInt eller 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 forblir primitiv

map på en IntStream tar imot en IntUnaryOperator og returnerer en ny IntStream, så det skjer ingen boxing.

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 på primitive strømmer

filter tar imot et IntPredicate og beholder samsvarende primitive verdier.

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 på IntStream

reduce reduserer strømmen ved hjelp av en IntBinaryOperator. Med en identitetsverdi returnerer den en int direkte.

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 over primitive verdier

forEach tar imot en IntConsumer og unngår dermed også boxing.

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));
    }
}

Samle til en tabell

toArray returnerer en primitiv int[], den naturlige motparten til en 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));
    }
}

Konvertere mellom Int og Long

IntStream.asLongStream utvider primitive verdier til long uten boxing.

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);
    }
}

Kort kontroll

Hva er hovedgrunnen til å bruke IntStream i stedet for Stream<Integer>?

Oppsummering

De brukte primitive strømmer for å unngå boxing:

  • IntStream og LongStream inneholder primitive verdier direkte.
  • De tilbyr numeriske terminaloperasjoner: sum, min, max og average.
  • min og max returnerer OptionalInt.
  • map, filter, reduce og toArray forblir primitive.
Gratis å komme i gang

Lær deg Java med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
104
Leksjoner
374

Ofte stilte spørsmål

Er leksjonen «IntStream og LongStream» gratis?

Ja – hele teksten i «IntStream og LongStream» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Java Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Java Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «IntStream og LongStream»?

Unngå boxing i strømmer Du øver på Java Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Java Academy?

Ingen tidligere erfaring er nødvendig. Java Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «IntStream og LongStream»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Java Academy-leksjonen?

Ja. Alle Java Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. IntStream og LongStream
  2. Intervall- og aggregatoperasjoner
  3. Avbildning til og fra objektsstrømmer
  4. Generere primitive strømmer
← Tilbake til Java Academy