IntStream ja LongStream
Vältä boxing-muunnoksia virroissa.
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:
IntStreamjaLongStreamsisältävät suoria primitiiviarvoja.- Ne lisäävät numeeriset pääteoperaatiot:
sum,min,maxjaaverage. minjamaxpalauttavatOptionalInt-arvon.map,filter,reducejatoArraykäsittelevät edelleen primitiivejä.
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
- IntStream ja LongStream
- Väli- ja koontioperaatiot
- Kuvaus olio- ja primitiivivirtojen välillä
- Primitiivivirtojen luonti