IntStream.mapToObj în Java

Trece de la numere int la obiecte: mapToObj transformă fiecare număr într-un obiect, boxed îl împachetează în Integer.

Sintaxă
<U> Stream<U> mapToObj(IntFunction<U> f)
Stream<Integer> boxed()

Ce face IntStream.mapToObj

mapToObj(f) transformă fiecare int într-un obiect, de exemplu un text: mapToObj(i -> "Rândul " + i). Rezultatul este un Stream<U> obișnuit, pe care poți folosi toList() sau collect.

boxed() este cazul simplu: fiecare int devine un Integer, iar rezultatul este Stream<Integer>. Ai nevoie de el pentru toList() cu numere sau pentru colectori ca groupingBy, care nu există pe IntStream.

Parametri

Parametru Descriere
f Funcția care primește un int și returnează un obiect.

Ce returnează

Un Stream de obiecte (Stream<Integer> pentru boxed).

Exemple

Exemplul 1: boxed pentru o listă de numere

import java.util.List;
import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        List<Integer> patrate = IntStream.rangeClosed(1, 6).map(i -> i * i).boxed().toList();
        System.out.println(patrate);
    }
}

Rezultat

[1, 4, 9, 16, 25, 36]

Exemplul 2: mapToObj: locuri numerotate și litere

chars() dă codurile literelor ca int; cu mapToObj le transformăm înapoi în Character.

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> locuri = IntStream.rangeClosed(1, 4).mapToObj(i -> "Locul " + i).toList();
        System.out.println(locuri);

        String spatii = "Iasi".chars()
                .mapToObj(c -> String.valueOf((char) c))
                .collect(Collectors.joining(" "));
        System.out.println(spatii);
    }
}

Rezultat

[Locul 1, Locul 2, Locul 3, Locul 4]
I a s i

Greșeli frecvente

  • Apelezi toList() sau collect(Collectors.toList()) direct pe IntStream: nu compilează. Pune întâi boxed().
  • Folosești map(i -> "Locul " + i): map pe IntStream trebuie să returneze tot int. Pentru obiecte folosește mapToObj.

Comenzi înrudite

  • IntStream: Un stream de numere int simple, cu sum, average, min, max; IntStream.of îl creează direct din valori.
  • IntStream.range: Creează șirul de numere întregi dintre două limite: range fără ultima valoare, rangeClosed cu ea inclusă.
  • Stream.mapToInt: Transformă elementele în numere primitive (int, long, double) și dă acces la sum(), average(), max().
  • Stream.map: Transformă fiecare element al stream-ului în altă valoare, eventual de alt tip.