Streams Map

Description

A map operation applies a function to each element to produce another stream.

The number of elements in the input and output streams is the same.

The operation does not modify the elements of the input stream.

You can apply the map operation on a stream using one of the following methods of the Stream<T> interface:


<R> Stream<R> map(Function<? super T,? extends R> mapper)
DoubleStream  mapToDouble(ToDoubleFunction<? super T> mapper)
IntStream     mapToInt(ToIntFunction<? super T> mapper)
LongStream    mapToLong(ToLongFunction<? super T> mapper)

IntStream, LongStream and DoubleStream also define map functions. The methods supporting the map operation on an IntStream are as follows:


IntStream     map(IntUnaryOperator mapper)
DoubleStream  mapToDouble(IntToDoubleFunction mapper)
LongStream    mapToLong(IntToLongFunction   mapper)
<U> Stream<U> mapToObj(IntFunction<? extends  U>  mapper)

Example

The following code shows how to use map() to map the elements from IntStream to their squares, and prints the mapped stream on the standard output.


import java.util.stream.IntStream;
/*from   w  w w.j a va 2s. co  m*/
public class Main {
  public static void main(String[] args) {
    IntStream.rangeClosed(1, 5)
             .map(n -> n * n)
             .forEach(System.out::println);

  }
}

The code above generates the following result.

Example 2

The following code maps a stream of employees to their names and prints the mapped stream.


import java.time.LocalDate;
import java.time.Month;
import java.util.Arrays;
import java.util.List;
/* w  w w  .  j  av  a 2 s . c o  m*/
public class Main {
  public static void main(String[] args) {
    Employee.persons()
            .stream()
            .map(Employee::getName)
            .forEach(System.out::println);
  }
}

class Employee {
  public static enum Gender {
    MALE, FEMALE
  }

  private long id;
  private String name;
  private Gender gender;
  private LocalDate dob;
  private double income;

  public Employee(long id, String name, Gender gender, LocalDate dob,
      double income) {
    this.id = id;
    this.name = name;
    this.gender = gender;
    this.dob = dob;
    this.income = income;
  }

  public long getId() {
    return id;
  }

  public void setId(long id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public Gender getGender() {
    return gender;
  }

  public boolean isMale() {
    return this.gender == Gender.MALE;
  }

  public boolean isFemale() {
    return this.gender == Gender.FEMALE;
  }

  public void setGender(Gender gender) {
    this.gender = gender;
  }

  public LocalDate getDob() {
    return dob;
  }

  public void setDob(LocalDate dob) {
    this.dob = dob;
  }

  public double getIncome() {
    return income;
  }

  public void setIncome(double income) {
    this.income = income;
  }

  public static List<Employee> persons() {
    Employee p1 = new Employee(1, "Jake", Gender.MALE, LocalDate.of(1971,
        Month.JANUARY, 1), 2343.0);
    Employee p2 = new Employee(2, "Jack", Gender.MALE, LocalDate.of(1972,
        Month.JULY, 21), 7100.0);
    Employee p3 = new Employee(3, "Jane", Gender.FEMALE, LocalDate.of(1973,
        Month.MAY, 29), 5455.0);
    Employee p4 = new Employee(4, "Jode", Gender.MALE, LocalDate.of(1974,
        Month.OCTOBER, 16), 1800.0);
    Employee p5 = new Employee(5, "Jeny", Gender.FEMALE, LocalDate.of(1975,
        Month.DECEMBER, 13), 1234.0);
    Employee p6 = new Employee(6, "Jason", Gender.MALE, LocalDate.of(1976,
        Month.JUNE, 9), 3211.0);

    List<Employee> persons = Arrays.asList(p1, p2, p3, p4, p5, p6);

    return persons;
  }

  @Override
  public String toString() {
    String str = String.format("(%s, %s,  %s,  %s,  %.2f)\n", id, name, gender,
        dob, income);
    return str;
  }
}

The code above generates the following result.





















Home »
  Java Streams »
    Tutorial »




Java Streams Tutorial