Java Academy · Oppitunti

IntStream ja LongStream

Vältä boxing-muunnoksia virroissa.

Oppitunti 1/413 vaihetta

IntStream ja LongStream on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 4 oppituntia.

Miksi primitiivivirrat ovat olemassa

Stream<Integer> paketoi jokaisen alkion Integer-olioksi. IntStream, LongStream ja DoubleStream käsittelevät suoraan primitiiviarvoja boxingin aiheuttamien kustannusten välttämiseksi.

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

IntStreamin luominen

Käyttäkää IntStream.of-metodia yksittäisille arvoille tai Arrays.stream-metodia int[]-taulukolle.

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 suurille luvuille

LongStream toimii kuten IntStream, mutta käsittelee long-arvoja ja estää suurten summien ylivuodon.

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

Erityiset pääteoperaatiot

Primitiivivirrat lisäävät numeerisia metodeja, joita oliovirroista puuttuu: sum, min, max ja 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());
    }
}

OptionalInt-tulokset

min ja max palauttavat OptionalInt-arvon, koska virta voi olla tyhjä. Käyttäkää getAsInt- tai orElse-metodia.

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 säilyy primitiivisenä

IntStream-virran map-metodi vastaanottaa IntUnaryOperator-operaattorin ja palauttaa toisen IntStream-virran, joten boxingia ei tapahdu.

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 primitiivivirroissa

filter vastaanottaa IntPredicate-predikaatin ja säilyttää ehdon täyttävät primitiivit.

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 IntStreamissä

reduce pelkistää virran IntBinaryOperator-operaattorin avulla. Identiteettiarvon kanssa se palauttaa suoraan int-arvon.

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 primitiiveille

forEach vastaanottaa IntConsumer-kuluttajan ja välttää jälleen boxingin.

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

Kokoaminen taulukoksi

toArray palauttaa primitiivisen int[]-taulukon, joka on IntStream-virran luonteva vastine.

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

Int- ja LongStreamin välillä muuntaminen

IntStream.asLongStream laajentaa primitiivit long-arvoiksi ilman boxingia.

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

Pikatarkistus

Mikä on tärkein syy käyttää IntStream-virtaa Stream<Integer>-virran sijaan?

Kertaus

Käytitte primitiivivirtoja boxingin välttämiseen:

  • IntStream ja LongStream sisältävät suoria primitiiviarvoja.
  • Ne lisäävät numeeriset pääteoperaatiot: sum, min, max ja average.
  • min ja max palauttavat OptionalInt-arvon.
  • map, filter, reduce ja toArray käsittelevät edelleen primitiivejä.
Aloita maksutta

Opi Java tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
104
Oppitunnit
374

Usein kysytyt kysymykset

Onko oppitunti ”IntStream ja LongStream” ilmainen?

Kyllä – oppitunnin ”IntStream ja LongStream” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”IntStream ja LongStream”?

Vältä boxing-muunnoksia virroissa. Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”IntStream ja LongStream”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Java Academy-oppitunnilla?

Kyllä. Jokainen Java Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. IntStream ja LongStream
  2. Väli- ja koontioperaatiot
  3. Kuvaus olio- ja primitiivivirtojen välillä
  4. Primitiivivirtojen luonti
← Takaisin: Java Academy