Kuvaus olio- ja primitiivivirtojen välillä
mapToObj ja mapToInt.
Kuvaus olio- ja primitiivivirtojen välillä on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/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.
Kaksi virtojen maailmaa
Javassa on oliovirtoja (Stream<T>) ja primitiivivirtoja (IntStream ja muut vastaavat). Kuvausmetodien avulla niiden välillä voi siirtyä.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
System.out.println(IntStream.rangeClosed(1, 3).sum());
}
}mapToObj: primitiivistä olioksi
mapToObj muuntaa jokaisen primitiivin olioksi ja tuottaa Stream<T>-virran.
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
List<String> labels = IntStream.rangeClosed(1, 3)
.mapToObj(n -> "item-" + n)
.collect(Collectors.toList());
System.out.println(labels);
}
}mapToInt: oliosta primitiiviksi
mapToInt poimii jokaisesta oliosta int-arvon ja tuottaa IntStream-virran, joka sopii numeeriseen aggregointiin.
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> words = List.of("hi", "hello", "hey");
int totalChars = words.stream()
.mapToInt(String::length)
.sum();
System.out.println(totalChars);
}
}boxed: primitiivistä kääreoliovirtaan
boxed muuntaa IntStream-virran Stream<Integer>-virraksi, jota tarvitaan ennen keräämistä List-kokoelmaan.
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
List<Integer> list = IntStream.rangeClosed(1, 5)
.boxed()
.collect(Collectors.toList());
System.out.println(list);
}
}mapToLong ja mapToDouble
Sama toimintamalli koskee muitakin primitiivejä: mapToLong ja mapToDouble.
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> prices = List.of("9.99", "19.50", "4.25");
double total = prices.stream()
.mapToDouble(Double::parseDouble)
.sum();
System.out.println(total);
}
}Miksi mapToInt on map-metodia parempi
map-metodin käyttäminen oliovirrassa pitää arvot pakattuina. mapToInt mahdollistaa numeeriset metodit, kuten sum ja average, ja välttää samalla boxingin.
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> nums = List.of(10, 20, 30);
double avg = nums.stream()
.mapToInt(Integer::intValue)
.average()
.getAsDouble();
System.out.println(avg);
}
}Edestakainen muunnos: oliosta IntStreamiin ja takaisin olioksi
Voitte siirtyä molempiin suuntiin samassa putkessa: poimikaa luvut, muuntakaa niitä ja muuntakaa ne sitten takaisin olioiksi.
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> words = List.of("a", "bb", "ccc");
List<String> report = words.stream()
.mapToInt(String::length)
.mapToObj(len -> "len=" + len)
.collect(Collectors.toList());
System.out.println(report);
}
}asLongStream ja asDoubleStream
Primitiivivirtojen sisällä tyyppejä voidaan laajentaa: asLongStream ja asDoubleStream välttävät boxingin samalla, kun numeerinen tyyppi vaihtuu leveämmäksi.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
double avg = IntStream.of(1, 2, 3, 4)
.asDoubleStream()
.average()
.getAsDouble();
System.out.println(avg);
}
}Primitiivitulosten kokoaminen
Kootaksenne primitiivit kokoelmaan kutsukaa ensin boxed-metodia ja sen jälkeen kerääjää.
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
Set<Integer> evens = IntStream.rangeClosed(1, 10)
.filter(n -> n % 2 == 0)
.boxed()
.collect(Collectors.toSet());
System.out.println(evens);
}
}flatMapToInt
flatMapToInt litistää oliot yhdeksi IntStream-virraksi. Se on hyödyllinen, kun jokainen olio tuottaa useita lukuja.
import java.util.List;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
List<int[]> rows = List.of(new int[]{1, 2}, new int[]{3, 4});
int sum = rows.stream()
.flatMapToInt(Arrays::stream)
.sum();
System.out.println(sum);
}
}Oikean muunnosmetodin valitseminen
Valitkaa metodi suunnan perusteella:
- Oliosta primitiiviksi:
mapToInt,mapToLongtaimapToDouble. - Primitiivistä olioksi:
mapToObjtaiboxed.
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> in = List.of("x", "yy");
String out = in.stream()
.mapToInt(String::length)
.mapToObj(Integer::toString)
.collect(Collectors.joining(","));
System.out.println(out);
}
}Pikatarkistus
Mikä metodi muuntaa IntStream-virran Stream<Integer>-virraksi?
Kertaus
Siirryitte olio- ja primitiivivirtojen välillä:
mapToInt/mapToLong/mapToDoublemuuntavat oliosta primitiiviksi.mapToObjjaboxedmuuntavat primitiivistä olioksi.flatMapToIntlitistää useita lukuja yhdeksi IntStreamiksi.- Primitiivivirtoihin siirtyminen mahdollistaa numeeriset aggregoinnit ilman boxingia.
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 ”Kuvaus olio- ja primitiivivirtojen välillä” ilmainen?
Kyllä – oppitunnin ”Kuvaus olio- ja primitiivivirtojen välillä” 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 ”Kuvaus olio- ja primitiivivirtojen välillä”?
mapToObj ja mapToInt. 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 3/4.
Kuinka kauan ”Kuvaus olio- ja primitiivivirtojen välillä”-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